VBA Outlook 2010收到邮件.Body为空

时间:2017-02-20 15:33:18

标签: vba ms-access outlook-vba

我在Outlook VBA中编写一个脚本,用于记录Access数据库中的每个电子邮件,因为它们进入我的收件箱。我触发的代码没有问题。它访问Access数据库没有问题。它复制主题没有问题。然后它到达身体并且根本不复制任何东西。我尝试过像.HTMLbody这样的东西而不仅仅是.Body,但是这又显示了一个空体。我的代码如下:

Option Explicit
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objNS As Outlook.NameSpace
Dim objEmail As Outlook.MailItem
Dim strIDs() As String
Dim intX As Integer
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim sDb As String
Dim sSQL As String
Dim qdf As QueryDef
strIDs = Split(EntryIDCollection, ",")
For intX = 0 To UBound(strIDs)
Set objNS = Application.GetNamespace("MAPI")
Set objEmail = objNS.GetItemFromID(strIDs(intX))
    sDb = "C:\Users\######\Documents\EmailDatabase.accdb"
    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(sDb)
    sSQL = "INSERT INTO AllEmails (Subject,Message) Values ('" & objEmail.Subject & "','" & objEmail.HTMLBody & "')"
    Set qdf = db.CreateQueryDef("", sSQL)
    qdf.Execute dbFailOnErro
MsgBox objEmail.HTMLBody
Next
Set objEmail = Nothing
End Sub

如果有人知道我做错了什么,请告诉我。三个小时的谷歌搜索似乎没有排序!

2 个答案:

答案 0 :(得分:0)

尝试从NewMailEx事件处理程序中删除任何额外代码(Access)。请谨慎使用此方法,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应该假设在这些事件发生后,您将始终获得收件箱中项目数量的一项增加。

EntryIDsCollection字符串包含与该项目对应的条目ID。请注意,当EntryIDCollection包含自上次触发事件以来收件箱中收到的所有项目的逗号分隔条目ID列表时,此行为已从事件的早期版本更改。

答案 1 :(得分:0)

感谢LEBoyd解决了这个问题!解决方案是先显示该消息,然后立即关闭olDiscard。由于某些尚待解释的原因,它充满了身体。在此处查看LEBoyd的问题-Outlook 2010 Email body is empty