我正在使用Microsoft Outlook API中的sendmail调用,可以找到here.
我需要发送邮件,允许主题中的特殊字符,例如é,à,ç或ñ。
我发现this post关于如何编码主题并且效果很好。这里的问题是,在“已发送邮件”文件夹中,主题显示为整个编码,就像Microsoft无法解决它一样。
Image can be found here.(无法发布图片)
这是一个已知问题还是有任何解决方法?找不到任何相关信息。
代码:
MicrosoftMessage.RootObject msMessage = new MicrosoftMessage.RootObject();
MicrosoftMessage.Message msg = new MicrosoftMessage.Message();
msg.Subject = "=?UTF-8?B?" + Convert.ToBase64String(Encoding.UTF8.GetBytes(subject)) + "?=";
msg.Body.ContentType = "HTML";
msg.Body.Content = body;
msMessage.Message = msg;
string mail;
using (MemoryStream memoryStream = new MemoryStream())
using (StreamReader reader = new StreamReader(memoryStream))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(msMessage.GetType());
serializer.WriteObject(memoryStream, msMessage);
memoryStream.Seek(0, SeekOrigin.Begin);
mail = reader.ReadToEnd();
}
try
{
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/json; charset=utf-8";
wc.Headers[HttpRequestHeader.Authorization] = "Bearer " + msInfo.AccessToken;
wc.Headers[HttpRequestHeader.Accept] = "text/*, application/xml, application/json; odata.metadata=none";
wc.UploadString("https://outlook.office.com/api/v2.0/me/sendmail", mail);
return true;
}
catch (Exception ex)
{
Log.Error("An error occurred while sending the mail.", ex);
return false;
}
答案 0 :(得分:0)
万一有人遇到同样的问题,解决方案就是添加
wc.Encoding = System.Text.Encoding.UTF8;
在try中并按原样发送主题,没有base 64编码。