首页 > 解决方案 > 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 版本替换撇号解决了问题。

标签: c#asp.net-coreasp.net-core-3.1

解决方案


考虑使用其他重载函数SendMailAsync(System.Net.Mail.MailMessage message),您可以在其中定义encodingSystem.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);

推荐阅读