vba - 延迟通过 EWS 发送电子邮件会将邮件留在已发送项目中,而不会实际发送
问题描述
我正在尝试通过 EWS(Exchange 2019)从 Word VBA 模块延迟发送电子邮件。只要我立即发送,这很好。一旦我添加延迟发送的元素
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367" PropertyType="SystemTime" />
<t:Value>2022-01-01T00:00:00.000</t:Value>
</t:ExtendedProperty>
邮件会立即进入已发送的项目,并且不会送达。这是整个代码 - 为了更好的可读性,XML 在下面:
Private Sub SendEMail()
Dim sReq As String
Dim xmlMethod As String
Dim XMLreq As New MSXML2.XMLHTTP60
Dim EWSEndPoint As String
Dim t As String
t = "2022-01-01T00:00:00.000"
EWSEndPoint = "https://myexchange/EWS/Exchange.asmx"
sReq = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf & _
"<soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">" & vbCrLf & _
"<soap:Header>" & vbCrLf & "<t:RequestServerVersion Version=""Exchange2016""/>" & vbCrLf & "</soap:Header>" & vbCrLf & _
"<soap:Body>" & vbCrLf & _
"<CreateItem MessageDisposition=""SendAndSaveCopy"" xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages"">" & vbCrLf & _
"<SavedItemFolderId>" & vbCrLf & _
"<t:DistinguishedFolderId Id=""sentitems"" />" & vbCrLf & _
"</SavedItemFolderId>" & vbCrLf & _
"<Items>" & vbCrLf & _
"<t:Message>" & vbCrLf & _
"<t:ItemClass>IPM.Note</t:ItemClass>" & vbCrLf & _
"<t:Subject>" & "123 " & Now() & " für " & t & "</t:Subject>" & vbCrLf & _
"<t:Body BodyType=""Text"">" & "body" & "</t:Body>" & vbCrLf & _
"<t:ExtendedProperty>" & vbCrLf & _
"<t:ExtendedFieldURI PropertyTag=""16367"" PropertyType=""SystemTime"" />" & vbCrLf & _
"<t:Value>" & t & "</t:Value>" & vbCrLf & _
"</t:ExtendedProperty>" & vbCrLf & _
"<t:ToRecipients>" & vbCrLf & _
"<t:Mailbox>" & vbCrLf & "<t:EmailAddress>" & "myemail" & "</t:EmailAddress>" & vbCrLf & "</t:Mailbox>" & vbCrLf & _
"</t:ToRecipients>" & vbCrLf & _
"</t:Message>" & vbCrLf & _
"</Items>" & vbCrLf & _
"</CreateItem>" & vbCrLf & _
"</soap:Body>" & vbCrLf & _
"</soap:Envelope>" & vbCrLf
xmlMethod = "POST"
XMLreq.Open xmlMethod, EWSEndPoint, False, "myusername", "mypassword"
XMLreq.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
XMLreq.Send sReq
If XMLreq.Status = 200 Then
' Message Sent okay
MsgBox ("ok")
Else
' Something went Wrong
MsgBox ("error")
End If
End Sub
这是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
<t:RequestServerVersion Version="Exchange2016"/>
</soap:Header>
<soap:Body>
<CreateItem MessageDisposition="SendAndSaveCopy" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</SavedItemFolderId>
<Items>
<t:Message>
<t:ItemClass>IPM.Note</t:ItemClass>
<t:Subject>123 31.03.2021 13:35:19 für 2022-01-01T00:00:00.000</t:Subject>
<t:Body BodyType="Text">body</t:Body>
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367" PropertyType="SystemTime" />
<t:Value>2022-01-01T00:00:00.000</t:Value>
</t:ExtendedProperty>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>myemail</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</Items>
</CreateItem>
</soap:Body>
</soap:Envelope>
我在欧洲,所以是 24 小时制。为了避免时间和日期格式的混乱,我在示例中取了一个简单的一天,但这没有任何区别。我试过过去和未来的日期,没有变化:邮件立即发送到已发送的项目,但不发送。(xmlreq.send-lines 总是在没有错误的情况下关闭。)只要我删除了四个扩展属性行,它就可以毫无问题地发送。
我忽略了什么?
解决方案
删除 SavedFolderId 无论如何它都是可选的,但是当我用它测试你的 XML 时,我看到了同样的问题,所以
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
<t:RequestServerVersion Version="Exchange2016"/>
</soap:Header>
<soap:Body>
<CreateItem MessageDisposition="SendAndSaveCopy" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<Items>
<t:Message>
<t:ItemClass>IPM.Note</t:ItemClass>
<t:Subject>123 31.03.2021 13:35:19 für 2022-01-01T00:00:00.000</t:Subject>
<t:Body BodyType="Text">body</t:Body>
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367" PropertyType="SystemTime" />
<t:Value>2021-03-31T23:06:00.000</t:Value>
</t:ExtendedProperty>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>glenscales@yahoo.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</Items>
</CreateItem>
</soap:Body>
</soap:Envelope>
对我来说没问题,它确实将消息临时保存到草稿文件夹(而不是发件箱),但一旦发送,消息最终会出现在 SentItems 文件夹中。
推荐阅读
- html - 如何在多个内部制作元素
一个 即使在宽度?(角度) - python - 将文件中的行放入多个变量中会产生奇怪的不一致
- c# - 如何为 HttpClient 调用配置网络跟踪 Dotnet 核心?
- reactjs - 在 IIS8 Windows 服务器 (Azure VM) 上部署 React App
- php - 如何从 html 转换为 php
- jenkins - 用于通过 ID(不是用户名)删除 Jenkins 全局凭据用户的 Groovy 脚本
- sql - 错误:“WHEN”位置或附近的语法错误
- javascript - 播放视频并在将鼠标悬停在图像上时显示文本
- c - Simd matmul 程序给出不同的数值结果
- c# - 如何在包含一些动态控件的 Windows 窗体应用程序中将多个 datagridview 列合并为一个?