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
Append contents of .msg attachment to message body
提问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 文件的内容,我使用了以下方法。
Use CreateItemFromTemplate for the msg file using the Outlook object
Use this Outlook object to save the data into a .txt file
Once the .txt file is created, read it and use the data as required
使用 Outlook 对象为 msg 文件使用 CreateItemFromTemplate
使用此 Outlook 对象将数据保存到 .txt 文件中
创建 .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 Josh
By the way...for a full solution see here... http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around-aol%E2%80%99s-recipient-email-address-issue/
顺便说一句......完整的解决方案见这里...... http://www.geakeit.co.uk/2010/06/25/automating-email-feedback-loop-fbl-processing-and-getting-around -aol%E2%80%99s-recipient-email-address-issue/
回答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