我正在尝试保存txt文件,这是msg的附件,这是将传入的电子邮件附加到我的Outlook。我想通了怎么做,工作正常,我在这里发布我的解决方案。然而,它不是最有效的解决方案,因为它首先将附加的msg文件保存到我的硬盘驱动器,然后再次使用过程CreateItemFromTemplate读取它,并最终保存附加的txt文件。
我试图在我的硬盘上存储的txt文件非常大。由于Outlook显示了节省提示,因此每次打开Outlook时都会浪费两次下载邮件内容。
这是我的尝试:
Sub saveESGMtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim objAtt_sec As Outlook.Attachment
Dim oMsg As Outlook.MailItem
Dim saveFolder As String: saveFolder = "C:\test"
Dim i As Integer: i = 0
Dim oApp As Outlook.Application
Set oApp = New Outlook.Application
For Each objAtt In itm.Attachments
If Left(objAtt.DisplayName,7) = "txtdata" Then
On Error Resume Next
objAtt.SaveAsFile (saveFolder & "\Item[" & i & "].msg")
If Err.Number Then objAtt.SaveAsFile (saveFolder & "\Item[" & i & "].msg")
Set oMsg = oApp.CreateItemFromTemplate(saveFolder & "\Item[" & i & "].msg")
For Each objAtt_sec In oMsg.Attachments
If Right(objAtt_sec.DisplayName, 3) = "txt" Then _
OobjAtt_sec.SaveAsFile saveFolder & "\" & objAtt_sec.DisplayName
Set objAtt_sec = Nothing
Next
Kill saveFolder & "\Item[" & i & "].msg"
Set oMsg = Nothing
i = i + 1
End If
Set objAtt = Nothing
Next
End Sub
答案 0 :(得分:0)
Outlook对象模型不允许您直接访问嵌入式邮件附件 - 如果您使用的是C ++或Delphi,则可以使用扩展MAPI使用IAttach :: OpenProperty(PR_ATTACH_DATA_OBJ,IID_IMessage)打开嵌入式邮件附件。
或者您可以使用Redemption(包装扩展MAPI并可以使用任何语言)并执行以下操作:
RDOSession session = new RDOSession();
RDOMail msg = (RDOMail)session.GetRDOObjectFromOutlookObject(YourOutlookMailItem);
foreach (RDOAttachment att in msg.Attachments)
{
if (att.Type == rdoAttachmentType.olEmbeddedItem)
{
RDOMail embeddedMsg = att.EmbeddedMsg;
ProcessEmbeddedMessage(embeddedMsg);
}
}