使用Gmail API发送电子邮件,在正文中编码希腊字符

时间:2019-03-28 16:35:07

标签: c# character-encoding gmail-api

我正在更新用于发送电子邮件的应用程序,以使用GMAIL API而不是SMTP。

我遇到电子邮件编码问题。主题已按原样显示,但身体未正确显示。 [下面是收到的电子邮件的屏幕截图]

screenshot-of-the-recieved-email

我用来发送电子邮件的代码:

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()上我得到了这个结果 visualstudio-textview-mm-variable

关于如何解决编码问题的任何建议?

1 个答案:

答案 0 :(得分:0)

但是不确定是否仍然有用。 最近遇到了同样的问题,并且花了很多令人沮丧的时间来寻找解决方案。它似乎很简单-不要使用MimeMessage.ToString()方法,因为作者将其标记为“不可靠”。改用WriteTo(Stream stream)。

类似这样的东西:

MimeMessage mimeMessage = MimeMessage.CreateFromMailMessage(msg);
using (MemoryStream ms = new MemoryStream())
{
    mimeMessage.WriteTo(ms);
    return Convert.ToBase64String(ms.GetBuffer())
        .TrimEnd('=')
        .Replace('+', '-')
        .Replace('/', '_');
}