我已经创建了Outlook邮件项目,并希望将其作为已发送邮件保存在文件夹中。我可以使用mail.SentOnBehalfofName
设置发件人邮件。如何在此添加日期字段。我有一些eml电子邮件,我想添加到没有付费库的文件夹中。我能够解析并将其保存到Outlook文件夹,但日期字段设置为“无”。有人可以帮助将日期字段设置为Outlook mailitem
对象,还是一种创建可以使用所有属性保存在Outlook中的邮件项目的方法?
答案 0 :(得分:0)
首先,只能在第一次保存项目之前更改其发送状态(MAPI限制)。其次,Outlook始终以未发送状态创建olMailItem
对象。在发送状态下创建的唯一项目是PostItem
(olPostItem
)。您可以创建一个PostItem,将其MessageClass属性更改为“ IPM.Note”,保存它,然后使用Marshal.ReleaseComObject
释放它(以确保Outlook忘记它),然后通过校准Namespace.GetItemFromID
重新打开它-这次,Outlook应该返回一个MailItem
对象(而不是原始的PostItem
)。
请记住,图标将是错误的,因此需要删除帖子图标-使用PR_ICON_INDEX
删除http://schemas.microsoft.com/mapi/proptag/0x10800003
属性(DASL名称为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