【发布时间】:2014-01-19 21:52:41
【问题描述】:
我有一些 VBA 可以在每封邮件到达我的收件箱后立即检查其主题,并通过 http 将某些电子邮件的内容提交到服务器进行处理。
这适用于没有附件的邮件,但如果电子邮件中有附件则失败。我正在使用 http GET 提交文本。
附件的存在对邮件的正文属性有什么影响,如何忽略附件并仅提交电子邮件正文?
VBA(为清楚起见而进行了修剪,但完整且实用):
声明:
Option Explicit
Private WithEvents olInboxItems As Items
启动时:
Private Sub Application_Startup()
Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).Items
End Sub
关于添加到收件箱的项目:
Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
On Error Resume Next
Dim olMailItem As MailItem
Dim strAttachmentName As String
Dim submitResult As String
If TypeOf Item Is MailItem Then
Set olMailItem = Item
If ((InStr(olMailItem.subject, "test subject") > 0)
Dim subject As String
subject = olMailItem.subject
Dim contents As Variant
contents = olMailItem.body
Dim submitURL As String
submitURL = "http:// ... " & subject & "..." & contents & "..."
XMLHttpSynchronous submitURL
End If
End If
Set Item = Nothing
Set olMailItem = Nothing
End Sub
http提交:
Sub XMLHttpSynchronous(ByVal URL As String)
Dim XMLHttpRequest As XMLHTTP
Set XMLHttpRequest = New MSXML2.XMLHTTP
XMLHttpRequest.Open "GET", URL, False
XMLHttpRequest.Send
End Sub
编辑:我现在正在使用以下代码(经过测试和工作)剥离附件,但 url 仍然没有正确提交。
Set myattachments = olMailItem.Attachments
While myattachments.Count > 0
myattachments.Remove 1
Wend
编辑 2:我设置了 contents=subject 并且正确提交了 url,但电子邮件的正文仍然没有运气,即使在邮件中删除了附件
【问题讨论】:
-
body 属性应该是一个字符串,但是可能 HTML 或 RTF 字符实际上是在弄乱您的 URL?也许在发送到您的服务器之前尝试去除附件(即 olMainItem.Attachments)?
-
好的,我在这里可能错了,但 Get 不允许 URL 中只包含 256 个字符?这可能是一回事,MailItem.Body 不包含任何与附件相关的内容。它纯粹包含电子邮件的内容。所以很难相信是执着造成了这里的问题。我同意 Marcin 的观点,这里的问题可能是特殊字符或字符串的长度。
-
嘿@Marcin,我添加了 Set myattachments = olMailItem.Attachments While myattachments.Count > 0 myattachments.Remove 1 Wend,它正确地剥离了附件,但仍然没有提交电子邮件的正文。感谢您的建议
-
@Vikas 邮件正文少于 256 个字符
-
您遇到的错误是什么?
标签: vba outlook outlook-2010