outlook Mailitem如何保存为已发邮件
How do I save outlook Mailitem as sent mail
我创建了一个 Outlook 邮件项目,并想将其作为已发送邮件保存在文件夹中。我能够使用 mail.SentOnBehalfofName
设置发件人邮件。如何为此添加日期字段。我有一些 eml 电子邮件,我想在没有付费图书馆的情况下将其添加到文件夹中。我能够解析并将其保存到 outlook 文件夹,但日期字段设置为 None。有人可以帮助将日期字段设置为 outlook mailitem
对象或创建可以保存在 outlook 中的具有所有属性的邮件项目的方法吗?
首先,项目的发送状态只能在第一次保存之前更改(MAPI 限制)。其次,Outlook 总是创建 olMailItem
个处于未发送状态的对象。在已发送状态下创建的唯一项目是 PostItem
(olPostItem
)。您可以创建一个 PostItem,将其 MessageClass 属性 更改为“IPM.Note”,保存它,然后使用 Marshal.ReleaseComObject
释放它(以确保 Outlook 忘记它),然后通过调用重新打开它Namespace.GetItemFromID
- 这次 Outlook 应该 return 返回一个 MailItem
对象(而不是原来的 PostItem
)。
请记住图标会出错,因此需要删除 post 图标 - 删除 PR_ICON_INDEX
属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x10800003
)使用MailItem.PropertyAccessor.DeleteProperty
.
另外请记住,Outlook 不会让您设置它认为“重要”的一些属性 - 例如消息日期、发件人条目 ID 等。并且只设置 SentOnBehalfOfName
属性这还不够 - 必须设置发件人条目 ID,否则用户将无法正确回复该消息。
如果使用 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
我创建了一个 Outlook 邮件项目,并想将其作为已发送邮件保存在文件夹中。我能够使用 mail.SentOnBehalfofName
设置发件人邮件。如何为此添加日期字段。我有一些 eml 电子邮件,我想在没有付费图书馆的情况下将其添加到文件夹中。我能够解析并将其保存到 outlook 文件夹,但日期字段设置为 None。有人可以帮助将日期字段设置为 outlook mailitem
对象或创建可以保存在 outlook 中的具有所有属性的邮件项目的方法吗?
首先,项目的发送状态只能在第一次保存之前更改(MAPI 限制)。其次,Outlook 总是创建 olMailItem
个处于未发送状态的对象。在已发送状态下创建的唯一项目是 PostItem
(olPostItem
)。您可以创建一个 PostItem,将其 MessageClass 属性 更改为“IPM.Note”,保存它,然后使用 Marshal.ReleaseComObject
释放它(以确保 Outlook 忘记它),然后通过调用重新打开它Namespace.GetItemFromID
- 这次 Outlook 应该 return 返回一个 MailItem
对象(而不是原来的 PostItem
)。
请记住图标会出错,因此需要删除 post 图标 - 删除 PR_ICON_INDEX
属性(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x10800003
)使用MailItem.PropertyAccessor.DeleteProperty
.
另外请记住,Outlook 不会让您设置它认为“重要”的一些属性 - 例如消息日期、发件人条目 ID 等。并且只设置 SentOnBehalfOfName
属性这还不够 - 必须设置发件人条目 ID,否则用户将无法正确回复该消息。
如果使用 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