vba 将 .msg 附件的内容附加到邮件正文

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3094431/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-11 11:45:49  来源:igfitidea点击:

Append contents of .msg attachment to message body

vbaoutlookoutlook-vbaemail-attachmentsmsg

提问by Josh

I have a script to open attachments and append them to the message body. I have it working for text documents but I need it working for .msg attachments too.

我有一个脚本来打开附件并将它们附加到邮件正文中。我让它用于文本文档,但我也需要它用于 .msg 附件。

At the moment it just doesn't read the object. Can anyone help?

目前它只是不读取对象。任何人都可以帮忙吗?

Sub RunAScriptRuleRoutine(MyMail As MailItem)

Dim strID As String
Dim olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem
Dim olMailAT As Outlook.MailItem

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)

If olMail.Subject = "lala" Then

    If olMail.Attachments.Count > 0 Then

        Dim strLine As String
        Dim mailLine As String
        Dim strLines As String

        For i = 1 To olMail.Attachments.Count

            strFileName = "C:\emailTemp\" + olMail.Attachments.Item(i).FileName

            If InStr(strFileName, "msg") Then

                olMail.Attachments.Item(i).SaveAsFile strFileName
                strLines = strLines + "//Start of " + strFileName + " //" + vbCrLf

                Open strFileName For Input As #1
                    Do While Not EOF(1)
                    Line Input #1, strLine
                        mailLine = mailLine + strLine
                    Loop
                Close #1

                olMailAT = mailLine
                strLine = objMailAT.Body
                strLines = strLines + "heres the .msg" + vbCrLf
                strLines = strLines + "//End of " + strFileName + " //" + vbCrLf

            Else

                olMail.Attachments.Item(i).SaveAsFile strFileName

                strLines = strLines + "//Start of " + strFileName + " //" + vbCrLf
                Open strFileName For Input As #1
                    Do While Not EOF(1)
                    Line Input #1, strLine
                        strLines = strLines + vbCrLf + strLine
                    Loop
                Close #1
                strLines = strLines + "//End of " + strFileName + " //" + vbCrLf

            End If

        Next

        'save to email body and save email
        olMail.Body = strLines
        olMail.Save

    End If

End If

Set olMail = Nothing
Set olNS = Nothing

End Sub

回答by VoodooChild

You should look into using Outlook Redemption.

您应该考虑使用Outlook Redemption

Also, you should look at this documentation for format specificaion http://msdn.microsoft.com/en-us/library/cc463912.aspx

此外,您应该查看此文档以了解格式规范 http://msdn.microsoft.com/en-us/library/cc463912.aspx

回答by Debapriya Chatterjee

To read the contents of a .msg file, I have used the following approach.

为了读取 .msg 文件的内容,我使用了以下方法。

  1. Use CreateItemFromTemplate for the msg file using the Outlook object

  2. Use this Outlook object to save the data into a .txt file

  3. Once the .txt file is created, read it and use the data as required

  1. 使用 Outlook 对象为 msg 文件使用 CreateItemFromTemplate

  2. 使用此 Outlook 对象将数据保存到 .txt 文件中

  3. 创建 .txt 文件后,读取它并根据需要使用数据

Dim OL : Set OL=CreateObject("Outlook.Application")
Dim Msg ':Set Msg= CreateObject("Outlook.MailItem")
Set Msg = OL.CreateItemFromTemplate("C:\test.msg")
'MsgBox Msg.Subject
Msg.saveAs "C:\test.txt", olDoc
'The above statement will save the contents of .msg 
'file into the designate .txt file
Set OL = Nothing
Set Msg = Nothing 

Once the .txt file is created use it as required for your computations.

创建 .txt 文件后,根据计算需要使用它。

回答by tiltedtimmy

    Function GetCurrentItem() As Object
     Dim objApp As Outlook.Application
     Set objApp = Application
     On Error Resume Next
     Select Case TypeName(objApp.ActiveWindow)
     Case "Explorer"
     Set GetCurrentItem = _
     objApp.ActiveExplorer.Selection.Item(1)
     Case "Inspector"
     Set GetCurrentItem = _
     objApp.ActiveInspector.CurrentItem
     Case Else
     End Select
    End Function
 'This is how you read the attachment using your path "strFileName"
   Set OL = New Outlook.Application
   Set myMessage = OL.CreateItemFromTemplate(strFileName)
   myMessage.Display
   Set msg2 = GetCurrentItem()
   MsgBox(msg2.Body)
   mg2.Close 1