使用Gmail API发送电子邮件,在正文中编码希腊字符 [英] Sending Email with Gmail API, Encoding Greek characters in body

查看:40
本文介绍了使用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发送电子邮件,在正文中编码希腊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆