【发布时间】:2014-06-13 21:02:03
【问题描述】:
当尝试使用 Exchange Web Services Managed API 针对 Exchange Server 2010 SP1 发送电子邮件时,会抛出 ServiceException 错误代码 ErrorInvalidRecipients 当收件人电子邮件地址(@ 左侧)包含丹麦字母 æøå。
电子邮件地址的本地部分是否不允许使用这些字符,或者我应该以某种方式对地址进行编码?
更新:这是测试源代码和跟踪数据:
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.AutodiscoverUrl("my@email.com");
EmailMessage email = new EmailMessage(service);
email.Body = "Test";
email.Subject = "Test";
email.ToRecipients.Add("æøå@domain.com");
email.Send();
来自 EWS 的跟踪数据显示如下:
请求标头:
POST /EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Accept: text/xml
User-Agent: ExchangeServicesClient/14.03.0032.000
Accept-Encoding: gzip,deflate
请求:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2010_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendOnly">
<m:Items>
<t:Message>
<t:Subject>Test</t:Subject>
<t:Body BodyType="HTML">Test</t:Body>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>æøå@domain.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
回应:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="14" MinorVersion="1" MajorBuildNumber="438" MinorBuildNumber="0" Version="Exchange2010_SP1" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:CreateItemResponseMessage ResponseClass="Error">
<m:MessageText>One or more recipients are invalid.</m:MessageText>
<m:ResponseCode>ErrorInvalidRecipients</m:ResponseCode>
<m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
<m:Items />
</m:CreateItemResponseMessage>
</m:ResponseMessages>
</m:CreateItemResponse>
</s:Body>
</s:Envelope>
最后,在 Outlook 中向这样的地址创建电子邮件会给出以下消息:
【问题讨论】:
-
你能显示请求/响应 http 转储吗?我们支持丹麦语,没有这个问题
-
您是否将 @ 的左侧部分编码为 UTF8?域也是非ASCII字符串吗?如果是这样,请不要忘记第二部分的 punycode。
-
您使用的是哪个版本的 Exchange?我似乎记得 Exchange 2010 的一些服务包和更新汇总包含 EWS 处理特殊字符的修复程序。
-
@BateTech 2010 SP1。更新了问题。那么升级到 SP2 可能会解决问题吗?
-
@Jportelas 我应该如何编码?我正在使用托管 API:
email.ToRecipients.Add("æøå@domain.com")。域名不是非ASCII。
标签: .net email exchangewebservices exchange-server-2010 ews-managed-api