c# - SmtpClient 邮件正文的纯文本版本缺少撇号
问题描述
我正在尝试通过 SmtpClient 发送电子邮件。
收到的电子邮件的仅文本部分缺少所有撇号。
例如,以下文本(法语):
Bonjour, l'administrateur de votre organization a validé votre demande d'accès à la plateforme。
被接收为
Bonjour, l administrateur de votre organization a validé votre demande d accès à la plateforme。
我只有 ASP.Net 的问题,在 .NET Core 3.1 控制台应用程序中结果很好。
这个问题的根源是什么?
任何帮助表示赞赏。
编辑:这是代码
using (var smtpClient = new SmtpClient
{
Host = @"smtp.myhost.net",
})
{
string body = @"Bonjour, l’administrateur de votre organisation a validé votre demande d’accès à la plateforme.";
await smtpClient.SendMailAsync(
"noreply@mydomain.com",
@"dest@domain.fr",
string.Empty,
body)
.ConfigureAwait(continueOnCapturedContext: false);
}
编辑:通过用 ASCII 版本替换撇号解决了问题。
解决方案
考虑使用其他重载函数SendMailAsync(System.Net.Mail.MailMessage message)
,您可以在其中定义encoding
为System.Text.Encoding.UTF8
您的邮件消息。
MailAddress to = new MailAddress("dest@domain.fr");
MailAddress from = new MailAddress("noreply@mydomain.com");
MailMessage message = new MailMessage(from, to);
message.Body = @"Bonjour, l’administrateur de votre organisation
a validé votre demande d’accès à la plateforme.";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "some text";
message.SubjectEncoding = System.Text.Encoding.UTF8;
然后SendMailAsync
会像:
await smtpClient.SendMailAsync(message)
.ConfigureAwait(continueOnCapturedContext: false);