如何保存邮件本身的附件是传入电子邮件的附件?

时间:2014-01-19 09:09:15

标签: vba email outlook

我正在尝试保存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

1 个答案:

答案 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);
    }
}