Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将邮件本身的附件保存为传入电子邮件的附件?_Vba_Email_Outlook - Fatal编程技术网

Vba 如何将邮件本身的附件保存为传入电子邮件的附件?

Vba 如何将邮件本身的附件保存为传入电子邮件的附件?,vba,email,outlook,Vba,Email,Outlook,我正在尝试保存txt文件,这是msg的附件,这是我的Outlook收到的电子邮件的附件。我知道怎么做了,它工作得很好,我在这里发布我的解决方案。但是,这并不是最有效的解决方案,因为它首先将附加的msg文件保存到我的硬盘上,然后使用过程CreateItemFromTemplate再次读取,最后保存附加的txt文件 我试图存储在硬盘上的txt文件相当大。正如Outlook显示的“节省”提示,每次打开Outlook时下载两次邮件内容都是浪费时间 以下是我的尝试: Sub saveESGMtoDisk(

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

Outlook对象模型不会让您直接访问嵌入式消息附件——如果您使用C++或Delphi,可以使用扩展的MAPI使用IAt::OpenPrimePrpAdxCyDATAOOBJ,IIDAIMIMESEGE打开嵌入式消息附件。p> 或者,您可以使用包装扩展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);
    }
}
你看过和看过吗