【发布时间】:2019-08-19 12:37:55
【问题描述】:
我正在更新用于发送电子邮件的应用程序以使用 GMAIL API 而不是 SMTP。
我遇到了电子邮件编码问题。主体按应有的方式显示,但身体未正确显示。 [下面是收到邮件的截图]
我用来发送电子邮件的代码:
public bool SendMailGmailAPI(System.Net.Mail.MailMessage mailMessage, GmailService service)
{
bool isEverythingOK = false;
try
{
var mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mailMessage);
string mm = mimeMessage.ToString();
var gmailMessage = new Google.Apis.Gmail.v1.Data.Message
{
Raw = Encode(mm)
};
UsersResource.MessagesResource.SendRequest request = service.Users.Messages.Send(gmailMessage, mailMessage.From.Address);
request.Execute();
isEverythingOK = true;
}
catch (Exception e)
{
ErrorMessage = e.Message;
isEverythingOK = false;
}
return isEverythingOK;
}
public static string Encode(string text)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text);
return System.Convert.ToBase64String(bytes)
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
}
mailMessage 是由此生成的:
public MailMessage CreateEmailMessage(string mailto="")
{
EmailMessageToSend = new MailMessage();
//setting from, to, cc, bcc, replyto
//make body
EmailMessageToSend.BodyEncoding = System.Text.Encoding.UTF8;
//EmailMessageToSend.HeadersEncoding = System.Text.Encoding.UTF8;
EmailMessageToSend.SubjectEncoding = System.Text.Encoding.UTF8;
EmailMessageToSend.IsBodyHtml = true;
EmailMessageToSend.Body = Body + "<hr>";
EmailMessageToSend.Body += DateTime.Now.ToString("dd.MM.yyyy HH:mm");
EmailMessageToSend.Body += "<br /><br />ΔΗΛΩΣΗ ΕΜΠΙΣΤΕΥΤΙΚΟΤΗΤΑΣ / ΑΠΟΠΟΙΗΣΗ ΕΥΘΥΝΗΣ <br /> Αυτό το μήνυμα περιέχει εμπιστευτικές και απόρρητες πληροφορίες και η χρήση τους επιτρέπεται μόνον από τον αναφερόμενο παραλήπτη. Σε περίπτωση που περιέλθει σε σας από λάθος, παρακαλούμε να το διαγράψετε άμεσα από το σύστημά σας ή να το καταστρέψετε και να ειδοποιήσετε τον αποστολέα. <br /><br />" +" CONFIDENTIALITY WARNING / DISCLAIMER <br /> The information in this email is confidential and is intended solely for the addressee(s). If you have received this transmission in error, and you are not an intended recipient, be aware that any disclosure, copying, distribution or use of this transmission or its contents is prohibited.";
var htmlView = AlternateView.CreateAlternateViewFromString(EmailMessageToSend.Body, null, "text/html");
EmailMessageToSend.Subject = Subject+" - Mail v2.0";
return EmailMessageToSend;
}
在 mimeMessage.ToString() 我得到这个结果
关于如何解决编码问题有什么建议吗?
【问题讨论】:
-
编码应该使用 Windows 编码之一,例如 1250,1251,1252, 1290 而不是 UTF8。
-
尝试在 HTML 正文边界添加此内容:content-transfer-encoding:utf8 或 content-transfer-encoding:quoted-printable 用于非 ascii 字符和字符集:windows-1253
-
内容类型:文本/html;字符集=UTF-8;内容传输编码:8bit
-
@jdweng 我尝试了所有这些编码,但电子邮件显示希腊字符为? (问号)
-
@JamesDean 我该如何添加它?可以举个例子吗?
标签: c# character-encoding gmail-api