C # Outlook Plugin - Создать новый элемент в Отправленный бокс без отправки этого сообщения

Tuấn Anh Phạm спросил: 28 апреля 2018 в 09:03 в: c#

Я пишу плагин для Outlook, я хочу создать новый элемент в Sent Box, но я не хочу его отправлять, просто сохраните его в Sent Box.

Pls, помогите мне!


1 ответ

Есть решение
Dmitry Streblechenko ответил: 29 апреля 2018 в 04:30

Объектная модель Outlook не позволяет, как правило, создавать сообщение в состоянии отправки - MailItem.Sent свойство доступно только для чтения. Даже на уровне MAPI (C ++ или Delphi) бит MSGFLAG_UNSENT может быть удален из свойства PR_MESSAGE_FLAGS только до того, как сообщение будет сохранено в первый раз. Единственный элемент, созданный OOM в отправленном состоянии, - это элемент сообщения, поэтому теоретически вы можете создать элемент сообщения, сохранить его, сбросить его свойство MessageClass до разыменования "IPM.Note", он снова открывается идентификатором записи - теперь вы будете иметь MailItem в отправленном состоянии. Вам не нужно будет устанавливать все свойства отправителя и получателя (около десятка из них) и удалять специальные свойства почты - посмотрите сообщение с OutlookSpy (нажмите кнопку "Сообщение").

Если вы используете Redemption (любой язык) - это вариант, он может легко создать фальшивое послание:

Set MySession = CreateObject("Redemption.RDOSession")
MySession.MAPIOBJECT = Application.Session.MAPIOBJECT
Set Folder = MySession.GetDefaultFolder(olFolderSentMail)
Set msg = Folder.Items.Add("IPM.Note")
msg.Sent = True
msg.Recipients.AddEx "The user", "user@domain.demo", "SMTP", olTo
msg.Sender = MySession.CurrentUser
msg.SentOnBehalfOf = MySession.CurrentUser
msg.subject = "Test sent message"
msg.Body = "test body"
msg.SentOn = Now
msg.ReceivedTime = Now
msg.Save
Tuấn Anh Phạm ответил: 03 мая 2018 в 05:55
Спасибо, я исправил использование Redemption. Но у меня есть новая проблема, я не могу обнаружить электронную почту в отправленном поле поддельной (созданной путем погашения) или реальной? вы не могли бы мне помочь?
Dmitry Streblechenko ответил: 03 мая 2018 в 03:05
Вы можете установить настраиваемое свойство, используя RDOMial.Fields [] или RDOMail.UserProperties. Затем вы можете проверить, присутствует ли это свойство, чтобы определить, был ли он создан вашим кодом.
Dmitry Streblechenko ответил: 03 мая 2018 в 03:05
Кроме того, если сообщение отвечает на ваш вопрос, отметьте его как таковой.