我正在尝试使用 C# 在 winforms 应用程序中生成 Gmail 草稿消息。草稿消息需要采用 HTML 格式并且能够包含附件。
我能够使用 生成带有附件AE.Net.Mail
的草稿,但草稿消息是纯文本的(我不知道如何编写代码AE.Net.Mail
给我一个 HTML Gmail 草稿消息)。
为了将消息转换为 HTML 格式,我使用 MimeKit 获取System.Net.Mail
消息并将其转换为MimeMessage
消息。但是,我无法弄清楚如何按照 Gmail 草案规范的要求将 MIME 消息放入 RFC 2822 格式和 URL 安全的 base64 编码字符串中。
这是 MimeKit 转换尝试的代码:
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
MailMessage msg = new MailMessage(); //System.Net.Mail
msg.IsBodyHtml = true;
msg.Subject = "HTML Email";
msg.Body = "<a href = 'http://www.yahoo.com/'>Enjoy Yahoo!</a>";
msg.Attachments.Add(file);
MimeMessage message = MimeMessage.CreateFromMailMessage(msg); //MimeKit conversion
//At this point I cannot figure out how to get the MIME message into
//an RFC 2822 formatted and URL-safe base64 encoded string
//as required by the Gmail draft specification
//See working code below for how this works in AE.Net.Mail
这是使用该代码的代码AE.Net.Mail
,但将 Gmail 草稿的正文生成为纯文本(基于Jason Pettys的这篇文章):
var service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var msg = new AE.Net.Mail.MailMessage //msg created in plain text not HTML format
{
Body = "<a href = 'http://www.yahoo.com/'>Enjoy Yahoo!</a>"
};
var bytes = System.IO.File.ReadAllBytes(filePath);
AE.Net.Mail.Attachment file = new AE.Net.Mail.Attachment(bytes, @"application/pdf", FileName, true);
msg.Attachments.Add(file);
var msgStr = new StringWriter();
msg.Save(msgStr);
Message m = new Message();
m.Raw = Base64UrlEncode(msgStr.ToString());
Draft draft = new Draft(); //Gmail draft
draft.Message = m;
service.Users.Drafts.Create(draft, "me").Execute();
private static string Base64UrlEncode(string input)
{
var inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
// Special "url-safe" base64 encode.
return Convert.ToBase64String(inputBytes)
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
}
有没有办法将 MimeKit 的MimeMessage
消息转换为 RFC 2822 格式和 URL 安全的 base64 编码字符串,以便可以将其生成为 Gmail 草稿?AE.Net.Mail
如果做不到这一点,有没有办法在编码之前以 HTML 格式创建消息?非常感谢所有帮助。