Я создал почтовый элемент Outlook и хочу сохранить его в папке как отправленное письмо. Я смог установить почту отправителя, используя mail.SentOnBehalfofName
. Как мне добавить поле Дата к этому. У меня есть несколько электронных писем eml, которые я хочу добавить в папку без платной библиотеки. Мне удалось разобрать и сохранить его в папку Outlook, но для поля даты установлено значение «Нет». Может ли кто-нибудь помочь либо установить поле даты для mailitem
объекта Outlook, либо способ создания почтовых элементов, которые можно сохранить в Outlook со всеми свойствами?
Решение проблемы
Во-первых, состояние отправки элемента можно изменить только до его первого сохранения (ограничение MAPI). Во- вторых, Outlook всегда создает olMailItem
объекты в неотправленном состоянии. Единственный элемент, созданный в состоянии отправки, — это PostItem
( olPostItem
). Вы можете создать PostItem, изменить его свойство MessageClass на «IPM.Note», сохранить его, затем освободить с помощью Marshal.ReleaseComObject
(чтобы Outlook забыл об этом), а затем снова открыть его, выполнив вызов Namespace.GetItemFromID
— на этот раз Outlook должен вернуть MailItem
объект (вместо оригинала PostItem
).
Имейте в виду, что значок будет неправильным, поэтому значок сообщения необходимо удалить — удалите PR_ICON_INDEX
свойство (имя DASL http://schemas.microsoft.com/mapi/proptag/0x10800003
) с помощью MailItem.PropertyAccessor.DeleteProperty
.
Также имейте в виду, что Outlook не позволит вам установить некоторые свойства, которые он считает «важными», такие как даты сообщений, идентификатор записи отправителя и т. Д. И установки только этого SentOnBehalfOfName
свойства будет недостаточно — идентификаторы записи отправителя должны быть установлены, или пользователь не сможет правильно ответить на это сообщение.
Если использовать Redemption (я являюсь его автором), создать сообщение в отправленном состоянии так же просто, как
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
Комментариев нет:
Отправить комментарий