Как сохранить Outlook Mailitem как отправленную почту - PullRequest
0 голосов
/ 25 февраля 2020

Я создал почтовый элемент Outlook и хочу сохранить его в папке как отправленное письмо. Мне удалось установить отправителя с помощью mail.SentOnBehalfofName. Как мне добавить поле даты к этому. У меня есть несколько электронных писем, которые я хочу добавить в папку без платной библиотеки. Мне удалось проанализировать и сохранить его в папке Outlook, но поле даты установлено на Нет. Может ли кто-нибудь помочь установить поле даты для объекта outlook mailitem или способ создания почтовых элементов, которые можно сохранить в outlook со всеми свойствами?

1 Ответ

0 голосов
/ 26 февраля 2020

Во-первых, состояние отправленного элемента можно изменить только до того, как оно будет сохранено в первый раз (ограничение MAPI). Во-вторых, Outlook всегда создает olMailItem объектов в неотправленном состоянии. Единственный элемент, созданный в отправленном состоянии - это PostItem (olPostItem). Вы можете создать PostItem, изменить его свойство MessageClass на «IPM.Note», сохранить его, затем отпустить его с помощью Marshal.ReleaseComObject (чтобы Outlook не забыл об этом), а затем снова открыть его, вызвав Namespace.GetItemFromID - на этот раз Outlook должен вернуть объект MailItem (вместо исходного PostItem).

Имейте в виду, что значок будет неправильным, поэтому значок сообщения необходимо удалить - удалите свойство PR_ICON_INDEX (DASL name http://schemas.microsoft.com/mapi/proptag/0x10800003) с использованием MailItem.PropertyAccessor.DeleteProperty.

Также имейте в виду, что Outlook не позволит вам установить некоторые свойства, которые он считает «важными», такие как даты сообщения, идентификатор записи отправителя и т. д. c. И установки только свойства SentOnBehalfOfName будет недостаточно - необходимо установить идентификаторы записи отправителя, иначе пользователь не сможет правильно ответить на это сообщение.

При использовании Погашение является опцией, создание сообщения в состоянии отправки так же просто, как

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Inbox = Session.GetDefaultFolder(olFolderInbox)
  set Msg = Inbox.Items.Add
  Msg.Sent = true
  set CU = Session.CurrentUser
  set recip = Msg.Recipients.AddEx(CU.Name, CU.SmtpAddress, "SMTP", olTo)
  Msg.Subject = "fake received message"
  Msg.Body = "just a test"
  vSenderEntryId = Session.AddressBook.CreateOneOffEntryID("Joe The Sender", "SMTP", "joe@domain.demo", false, true)
  set vSender = Session.AddressBook.GetAddressEntryFromID(vSenderEntryId)
  Msg.Sender = vSender
  Msg.SentOnBehalfOf = vSender
  Msg.SentOn = Now
  Msg.ReceivedTime = Now
  Msg.Save
...