Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Outlook 2010收到邮件。正文为空_Vba_Ms Access_Outlook - Fatal编程技术网

VBA Outlook 2010收到邮件。正文为空

VBA Outlook 2010收到邮件。正文为空,vba,ms-access,outlook,Vba,Ms Access,Outlook,我正在Outlook VBA中编写一个脚本,在Access数据库中记录每封电子邮件进入我的收件箱时的内容。我的代码触发器没有问题。它访问Access数据库时没有问题。它可以毫无问题地复制主题。然后它到达身体,什么也不复制。我尝试了.HTMLbody而不是.Body,但这再次显示了一个空的Body。我的代码如下: Option Explicit Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) Dim objN

我正在Outlook VBA中编写一个脚本,在Access数据库中记录每封电子邮件进入我的收件箱时的内容。我的代码触发器没有问题。它访问Access数据库时没有问题。它可以毫无问题地复制主题。然后它到达身体,什么也不复制。我尝试了.HTMLbody而不是.Body,但这再次显示了一个空的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

如果有人知道我做错了什么,请告诉我。三个小时的谷歌搜索似乎并没有解决这个问题

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


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

感谢LEBoyd,此问题现已解决!解决方案是。显示消息,然后立即。关闭olDiscard。由于一些尚待解释的原因,它充满了身体。请参见LEBoyd的问题-

您的消息框是否也不返回任何内容?是@Jordan消息框打开(因此不会抛出错误),但其中没有任何内容。在分配完代码(F8)后,在您的本地人窗口中单步查看
objEmail
。展开变量时,查看是否有
body
属性。想知道
GetItemFromID
是否实际返回了
MailItem
刚刚尝试@click,有一个
body
属性设置为空字符串。我可以看到主题字符串和其他所有内容,但没有
正文
。之前也忘了提到,这是在IMAP帐户上,这有什么区别吗?之前也问过同样的问题。那里的一条评论暗示,如果请求,应该加载的正文可能还没有加载。这很有启发性,谢谢@eugene你到MSDN的链接解释说NewMailEx是针对POP3帐户的,而不是IMAP。所以,也许最好的方法是创建一个规则,在收到电子邮件时运行脚本?那么我如何识别该电子邮件呢?在这种情况下,
MailItem
的一个实例被传递到VBA宏。规则不需要使用
GetItemFromId
方法。我尝试了这个方法,它再次获得了主题,没有问题,但没有正文。这意味着在预览或打开邮件之前,它无法下载邮件。现在我要试着在那个点触发它。。。需要更多的谷歌搜索:)@codeacker,我知道这很古老,但你有没有找到解决问题的方法?关于2010年展望,我也有类似的问题。主题在那里,HTMLBody显示一些HTML文本,但不是来自消息的文本,并且.Body为空。我试着循环一个睡眠过程,因为我发现了一篇关于加载.Body可能延迟的帖子,但即使循环20秒,我仍然没有.Body.Thank@codeacker。我确实发现,如果我。显示消息,然后立即。关闭oldiscard,无论出于什么原因,它填充了身体。这是我提出的新问题: