VBA从Outlook邮件检索HTML正文

VBA从Outlook邮件检索HTML正文,vba,outlook,Vba,Outlook,首先,我通过Outlook创建电子邮件: Sub CreateHTMLMail() 'Creates a new e-mail item and modifies its properties. Dim olApp As Outlook.Application Dim objMail As Outlook.MailItem Set olApp = Outlook.Application 'Create e-mail item Set objMail = olApp.CreateItem(olM

首先,我通过Outlook创建电子邮件:

Sub CreateHTMLMail()
'Creates a new e-mail item and modifies its properties.

Dim olApp As Outlook.Application
Dim objMail As Outlook.MailItem
Set olApp = Outlook.Application
'Create e-mail item
Set objMail = olApp.CreateItem(olMailItem)

Dim sHTML_Open              As String
Dim sHTML_Introduction      As String
Dim sHTML_Goodbye           As String
Dim sHTML_Close             As String
Dim sHTML_Process_Date      As String
Dim sHTML_Processor         As String
Dim sHTML_Issuer            As String
Dim sHTML_Details           As String

Dim sHTML_Body              As String

sHTML_Open = "<HTML><BODY>"
sHTML_Introduction = "Hi team,<BR/><BR/>" & _
                        "Data is ready to process. Please find details as below.<BR/>"
sHTML_Process_Date = "<P ID='PROCESSDATE'>28 February 2013</P>"
sHTML_Processor = "<P ID='PROCESSOR'>AKSHAY</ID></P>"
sHTML_Issuer = "<P ID='ISSUER'>DATAGROUP.COM</ID></P>"
sHTML_Details = "<P ID='DETAILS'>" & _
                    "<UL>" & _
                        "<LI>Fimta23456 09:00:00 flor345</LI>" & _
                        "<LI>Fimta23456 09:00:00 flor345</LI>" & _
                    "</UL>" & _
                "</P><BR/>"
sHTML_Goodbye = "Thanks"
sHTML_Close = "</BODY></HTML>"

sHTML_Body = sHTML_Open & sHTML_Introduction & sHTML_Process_Date & sHTML_Processor & sHTML_Issuer & _
          sHTML_Details & sHTML_Goodbye & sHTML_Close

With objMail
   'Set body format to HTML
   .BodyFormat = olFormatHTML
   .To = "Kim Gysen"
   .Subject = "data remit file"
   .HTMLBody = sHTML_Body
   .Display
End With
End Sub
Sub Get_OL()

Dim oFolder                 As MAPIFolder
Dim oItem                   As Variant

Dim sHTML_Body              As String
Dim sHTML_Process_Date      As String
Dim sHTML_Processor         As String
Dim sHTML_Issuer            As String
Dim sHTML_Details           As String

Dim oExcel              As Object
Dim oBook               As Workbook

Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add


'Access the outlook inbox folder

Set oFolder = GetNamespace("MAPI").PickFolder

'On error resume next usually not to use, but feteching emails may give unexpected errors
On Error Resume Next
For Each oItem In oFolder.Items
    If TypeOf oItem Is Outlook.MailItem Then
        If oItem.Subject Like "*data remit file*" Then
            'Turn off on error resume next asap
            On Error GoTo 0
            sHTML_Body = oItem.HTMLBody
            Debug.Print sHTML_Body

            Exit For
        End If
    End If
Next oItem

End Sub 
在debug.print上,我得到的是(仅放置格式的最后一行):

Hi团队,

数据已准备好处理。请查看以下详细信息。

2013年2月28日

AKSHAY

DATAGROUP.COM

  • Fimta23456 09:00:00 flor345
  • Fimta23456 09:00:00 flor345

    • 谢谢

我想检索我放在HTMLBody中的原始HTML

2种方式:

1)解析文本-需要做的几件事(不推荐:硬编码)

您所需要的就是这样做,但MSDN显示了如何使用InStr函数来实现这一点。我强烈建议使用解析html文本。注意:需要引用MS VBScript正则表达式x.x

2)使用MailItem对象(推荐)

如果MailItem不包含您的属性,则无需执行任何操作;)


这封电子邮件在
CreateHTMLMail
和您查看它的时间之间的哪个位置?上面的代码中缺少一些步骤。很抱歉,答复太晚。我用CreateHTMLMail创建邮件,我把它发送给我自己,然后用Get_OL检索它。我希望检索与我最初创建的HTML相同的HTML。我问的原因是我几乎测试了您的精确代码,并且能够检索与创建的HTML完全相同的HTML。你在兑换吗?或者使用gmail之类的东西?我使用Outlook。这和RTF设置有什么关系吗?谢谢你的回答,虽然我不再处理这个问题了。也许你的回答对其他人还是有帮助的。
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi team,<br><br>Data is ready to process. Please find details as below.<br><br><o:p></o:p></p><p>28 February 2013<o:p></o:p></p><p id=PROCESSOR>AKSHAY<o:p></o:p></p><p id=ISSUER>DATAGROUP.COM<o:p></o:p></p><ul type=disc><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1'>Fimta23456 09:00:00 flor345<o:p></o:p></li><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo1'>Fimta23456 09:00:00 flor345<o:p></o:p></li></ul><p class=MsoNormal><br>Thanks<o:p></o:p></p></div></body></html>