GOOGLE ADS

пятница, 29 апреля 2022 г.

Как сохранить Outlook Mailitem как отправленную почту

Я создал почтовый элемент 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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...