我需要通过VBA创建邮件,发送邮件,然后导出已发送邮件的.msg文件进行存档(我知道,这很奇怪,但这就是老板的要求)。
创建邮件非常简单:
Set OLK = Outlook.Session
Set ML = OLK.Createitem olMailItem
With ML
.Recipients.add "somebody@somedomain.com"
.Subject = "Great mail you have there"
.Body = "It would be a shame if somebody couldn't archive it"
End with
ML.Send
问题是,发送邮件后,在发送文件夹中移动,ML对象指向什么。
我可以在发送之前使用.saveas方法,但是保存的文件是未发送的版本,可以编辑并再次发送。
如何跟踪已发送文件夹中的邮件?
我发现的“蛮力”方式意味着在发送
之前保存ConversationIndexIDX= ML.ConversationIndex
然后扫描已发送文件夹中的所有项目:
For each ML in OLK.Session.GetDefaultFolder(olFolderSentMail).Items
If ML.ConversationIndex = IDX Then ML.SaveAs HomeDir & "\" & OutFileName: Exit For
Next
但这并不是一项顺利的工作....(如果有一些smartass回复自动邮件,即使没有人应该这样做,也可能会失败)
答案 0 :(得分:0)
最大,
您可以处理属于“已发送邮件”文件夹的Items类的ItemAdd事件。将一个或多个项目添加到指定集合时会触发它。
在ItemAdd事件处理程序中,您可以检查是否应保存特定项目。例如,您可以在调用Send方法之前添加用户属性。有关详细信息,请参阅UserProperties课程。
Set myProp = myItem.UserProperties.Add("MyPropName", olText)
请注意,MailItem类提供SaveSentMessageFolder属性,该属性允许设置一个Folder对象,该对象表示发送后将保存电子邮件副本的文件夹。因此,您可以指定一个自定义文件夹来保存它们。
答案 1 :(得分:0)
您可以添加用户属性(MailItem.UserProperties.Add),但这会导致以TNEF格式发送消息,除非UseTnef属性(DASL名称http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B
)明确设置为false。 / p>
您可以使用PropertyAccessor.SetProperty设置命名的MAPI属性 - 只需选择您的自定义GUID和属性名称。 E.g。
ML.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{3ADE3813-37A9-49C9-AD84-D49C8FF5D660}/MyOwnProp", "SomeValue")