“已发送邮件”文件夹中的C#Outlook API主题编码

时间:2016-06-29 11:57:57

标签: c# email character-encoding outlook

我正在使用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;
}

1 个答案:

答案 0 :(得分:0)

万一有人遇到同样的问题,解决方案就是添加

  wc.Encoding = System.Text.Encoding.UTF8;

在try中并按原样发送主题,没有base 64编码。