使用 vba 代码获取电子邮件 body

Getting email body using vba code

我正在尝试使用 VBA 在我的 outlook 电子邮件中获取电子邮件 header 和 body。我正在使用 Application_NewMail() 事件处理程序来处理新邮件已到达,但我不知道如何从那里获取 header 和 body。

这是我在 Application_NewMail() 事件处理程序中的代码:

Private WithEvents myOlItems  As Outlook.Items

Private Sub Application_NewMail()
Dim olApp As Outlook.Application
Dim oNS         As NameSpace
Dim oFolder     As MAPIFolder
Dim oNewMail    As MailItem
Set olApp = Outlook.Application
Set oNS = GetNamespace("MAPI")
Set oFolder = oNS.GetDefaultFolder(olFolderInbox)
Set oNewMail = oFolder.Items.GetFirst
'This is the string that hold the mail body.
Dim mailBody As String
Dim mailArg() As String


    MsgBox "New Mail!"

End Sub

一旦我收到电子邮件,此功能就会正常启动。我成功地让消息框弹出。但我希望能够读取邮件 body 和 header 以插入到数据库中。

它的实际数据库方面我知道该怎么做,但我不确定如何从电子邮件中获取 header 和 body。我试过这样的事情:

Set olItem = ActiveExplorer.Selection.Item(1)
    mailBody = oNewMail.Body
    mailArg = Split(mailBody, vbLf)

    'Check to see what is inside the body. We need to say Tank X: Y
    MsgBox "This is line one " & mailArg(0) & "This is line two " & mailArg(1)

我收到错误:Object variable or With block variable not set

任何帮助将不胜感激。

您需要改为处理应用程序 class 的 NewMailEx 事件。对于 Microsoft Outlook 处理的每个接收项目,此事件都会触发一次。该项目可以是多种不同项目类型中的一种,例如 MailItem、MeetingItem 或 SharingItem。 EntryIDsCollection 字符串包含对应于该项目的条目 ID。

NewMailEx 事件在新邮件到达收件箱时且在客户端规则处理发生之前触发。您可以使用 EntryIDCollection 数组中返回的条目 ID 来调用 NameSpace.GetItemFromID 方法并处理该项目。

Outlook 对象模型提供了三种处理项目正文的主要方式:

  1. Body.
  2. HTMLBody.
  3. Word 编辑器。 Inspector WordEditor 属性 class returns 表示消息正文的Word 文档实例。因此,您可以使用 Word 对象模型对邮件正文做任何您需要的事情。

最后,可以使用PropertyAccessor对象(参见MailItemclass对应的属性)读取"PR_TRANSPORT_MESSAGE_HEADERS"属性值。

  propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")