C# smtp.office365.com主题编码问题

C# smtp.office365.com主题编码问题,c#,office365,smtpclient,mailmessage,C#,Office365,Smtpclient,Mailmessage,我尝试使用我的专用office365帐户发送电子邮件,但我的主题编码有问题-我所有的特殊字符都被替换为“?” 我使用的代码非常简单,可以与smtp-mail.outlook.com上的不同测试帐户配合使用 using (var mailMsg = new MailMessage(sender, recipient)) { mailMsg.IsBodyHtml = true; mailMsg.Subject = "Hello world żółćąź"; mailMsg.B

我尝试使用我的专用office365帐户发送电子邮件,但我的主题编码有问题-我所有的特殊字符都被替换为“?”

我使用的代码非常简单,可以与smtp-mail.outlook.com上的不同测试帐户配合使用

using (var mailMsg = new MailMessage(sender, recipient))
{
    mailMsg.IsBodyHtml = true;
    mailMsg.Subject = "Hello world żółćąź";
    mailMsg.Body = body;

    using (var smtpClient = new SmtpClient())
    {
        smtpClient.Credentials = new NetworkCredential("email", "password");
        smtpClient.EnableSsl = true;
        smtpClient.Host = "smtp.office365.com";
        smtpClient.Port = 587;

        await smtpClient.SendMailAsync(mailMsg);
    }
}
我试图设置所有可能的主题编码,但没有成功。此外,将主题字符串转换为Base64String也不起作用。还尝试设置内容类型标头字符集。。。我发现所有的决心对我都没有帮助。也许这是仅与office365有关的特定SmtpClient问题

而且设置身体编码也没有帮助

mailMsg.BodyEncoding = Encoding.UTF8;

设置邮件消息的编码,使其支持您使用的字符,因为默认值为
us ascii

mailMsg.BodyEncoding = Encoding.UTF8;

我的公司账户也有同样的问题。以下是我目前的调查结果:

它似乎将
System.Net.Mail.SmtpClient
类的行为更改为发送不同的SMTP命令和不同的数据负载

在我的情况下,邮件在发送到另一个Office365帐户时始终可以正常送达,但对于其他帐户,我们收到了来自远程SMTP服务器的电子邮件跳转通知,该服务器接收来自Office365的中继电子邮件。该错误类似于“接收到无效数据,应为7位安全字符”。因此,我可以想象来自OP的远程SMTP服务器可能会用问号悄悄地替换低7位范围之外的所有字符

通过GMail发送邮件(该邮件的
SMTPUTF8
扩展也处于活动状态)没有问题

到目前为止,我还没有调试
SmtpClient
参考源,以查看发送到Office365服务器的内容。根本原因可能是,
SmtpClient
发送了一条好消息,Office365在转发之前“破坏”了该消息,而GMail发送的消息没有问题;或者
SmtpClient
构建一个坏消息/SMTP会话,Office365会自动接受并转发到远程SMTP服务器,但GMail会在转发之前动态接受并修复该会话

无论哪种方式,我都使用NuGet拉入了和库,并使用它们来发送电子邮件。它们提供SMTP协议日志来解决问题,并通过正确发送RFC 6531中定义的
SMTPUTF8
8BITMIME
标志来解决所述问题。它确实需要额外的工作,但图书馆做的工作


如果您想继续使用
SmtpClient
,那么您应该联系Microsoft(这是他们的服务和.NET运行时),或者运行自己的私有SMTP服务器,而不使用中继到远程服务器的
SMTPUTF8
扩展。在后一种情况下,
SmtpClient
应正确编码所有标题和有效负载(尽管这确实意味着,当您要向具有国际化电子邮件地址的人发送邮件时,
DeliveryFormat
属性可能无法使用
International
值).

我们在使用库的Office365 SMTP服务器上遇到了相同的问题。我们通过禁用SMTPUTF8解决了这个问题,因此总是对非ascii字符进行编码


正如JBert所说,同样的协议也适用于GMail SMTP服务器。

Downvote:当问题显然与主题有关时,您正在设置正文编码。还要注意的是,该问题确实指出,尝试了所有类型的编码属性。