使用 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 对象模型提供了三种处理项目正文的主要方式:
- Body.
- HTMLBody.
- Word 编辑器。 Inspector WordEditor 属性 class returns 表示消息正文的Word 文档实例。因此,您可以使用 Word 对象模型对邮件正文做任何您需要的事情。
最后,可以使用PropertyAccessor对象(参见MailItemclass对应的属性)读取"PR_TRANSPORT_MESSAGE_HEADERS"属性值。
propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")
我正在尝试使用 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 对象模型提供了三种处理项目正文的主要方式:
- Body.
- HTMLBody.
- Word 编辑器。 Inspector WordEditor 属性 class returns 表示消息正文的Word 文档实例。因此,您可以使用 Word 对象模型对邮件正文做任何您需要的事情。
最后,可以使用PropertyAccessor对象(参见MailItemclass对应的属性)读取"PR_TRANSPORT_MESSAGE_HEADERS"属性值。
propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E")