【发布时间】:2013-06-08 14:03:32
【问题描述】:
编辑:新信息:我刚刚意识到,虽然 Mailitem.Body 的返回是 "",但实际值是 "Application-defined or object-defined error" 。我不完全确定这意味着什么,但我知道它显示在多个字段中——我在下面提供了一个屏幕截图。
我遇到的问题是某些属性会返回正确的值,而其他属性则不会。我有一个示例电子邮件,其中我有一封主题为“主题”的电子邮件,邮件为“正文”,发件人电子邮件地址为“email@address.com”,发送日期为 2013 年 6 月 12 日。
当我运行以下代码时:
Dim ComputerName As String
Dim ErrorState As String
For Each MailItem In InboxItems
ComputerName = MailItem.Subject
'ErrorState = MailItem.Body
ErrorState = MailBody(MailItem)
strDate = GetDate(MailItem.SentOn)
SenderEmail = MailItem.SenderEmailAddress
If strDate = DateToday And SenderEmail = "email@address.com" Then
Computers(a, 0) = ComputerName
Computers(a, 1) = ErrorState
a = a + 1
End If
Debug.Print MailItem.Subject
Debug.Print MailItem.Body
Next MailItem
我得到的是 ComputerName = "Subject"、ErrorState = ""、SenderEmail = "" 和 strDate = "2013/6/12"(在这种情况下是正确的格式)。为什么这会为两个 Mailitem 属性返回正确的值,而不是为其他两个?这是一个非常奇怪的问题,如果您能提供任何帮助,我将不胜感激!
我将在这里为代码添加更多上下文:
Set objOutlook = CreateObject("Outlook.Application", "localhost")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set Inbox = GetFolder("email@address.org/inbox")
Set InboxItems = Inbox.Items
InboxItems.SetColumns ("SentOn")
GetFolder 是一个通过文件夹路径获取邮箱的函数。我必须这样做,因为我没有使用 Outlook 中的默认收件箱。
我还尝试使用下面建议的 MailBody 函数,以防正文为 HTML 或 RTF 格式。可惜证明body是正常的,MailItem.Body应该找回来了,还是不行。 MailItem.Body 返回“”,即使我知道电子邮件有正文。身体只是数字 1,这就是我应该得到的。
另外,我应该注意电子邮件的发件人和收件人是相同的;换句话说,这封电子邮件是从一个电子邮件地址发送给它自己的。我不知道这是否会有所作为,但我想我会把它放在那里以防万一。
【问题讨论】:
-
如何声明和分配
InboxItems?你在用Option Explicit吗? -
@DougGlancy 我将编辑大部分代码,请稍等
-
这似乎对我有用,即我得到了 Body 和 SenderEmail 内容。祝你好运!
-
@DougGlancy 哈哈好吧,至少我知道代码确实有效。我只是错过了一些东西...感谢您的测试:)