Sending Email with Gmail API, Encoding Greek characters in body(使用Gmail API发送电子邮件,在正文中编码希腊字符)
本文介绍了使用Gmail API发送电子邮件,在正文中编码希腊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在更新用于发送电子邮件的应用程序,以使用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()上,我得到以下结果
有关于如何修复编码问题的建议吗?
推荐答案
但是,不确定它是否仍然相关。 最近遇到了同样的问题,花了相当令人沮丧的时间试图找到解决方案。而且它看起来非常简单--不要使用MimeMessage.ToString()方法,因为它被作者标记为"不可靠"。请改用WriteTo(数据流)。
类似以下内容:
MimeMessage mimeMessage = MimeMessage.CreateFromMailMessage(msg);
using (MemoryStream ms = new MemoryStream())
{
mimeMessage.WriteTo(ms);
return Convert.ToBase64String(ms.GetBuffer())
.TrimEnd('=')
.Replace('+', '-')
.Replace('/', '_');
}
这篇关于使用Gmail API发送电子邮件,在正文中编码希腊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用Gmail API发送电子邮件,在正文中编码希腊字符
基础教程推荐
猜你喜欢
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 XML 转换为通用列表 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01