如何在 ASP.NET 中使用具有 HTML 正文 + 附件的 GMAIL API 发送电子邮件
Posted
技术标签:
【中文标题】如何在 ASP.NET 中使用具有 HTML 正文 + 附件的 GMAIL API 发送电子邮件【英文标题】:How to send email using GMAIL API having HTML body + attachment in ASP.NET 【发布时间】:2016-06-16 06:33:24 【问题描述】:var msg = new AE.Net.Mail.MailMessage
Subject = subject,
Body = bodyhtml,
From = new System.Net.Mail.MailAddress("myemail")
;
foreach (string add in vendorEmailList.Split(','))
if (string.IsNullOrEmpty(add))
continue;
msg.To.Add(new System.Net.Mail.MailAddress(add));
msg.ReplyTo.Add(msg.From); // Bounces without this!!
msg.ContentType = "text/html";
////attachment code
foreach (string path in attachments)
var bytes = File.ReadAllBytes(path);
string mimeType = MimeMapping.GetMimeMapping(path);
AE.Net.Mail.Attachment attachment = new AE.Net.Mail.Attachment(bytes, mimeType, Path.GetFileName(path), true);
msg.Attachments.Add(attachment);
////end attachment code
var msgStr = new StringWriter();
msg.Save(msgStr);
Message message = new Message();
message.Raw = Base64UrlEncode(msgStr.ToString());
var result = gmailService.Users.Messages.Send(message, "me").Execute();
此代码在没有附件的情况下工作,但直接使用附件而不是附件 byte[] 出现在收件箱中。
如果我删除 msg.ContentType = "text/html" 这一行,那么它可以工作,但 html 不会在电子邮件中呈现,显示为纯文本。
我想同时发送 HTML 正文和附件,请帮忙。
【问题讨论】:
能否在编码之前包含整个消息?那会很有趣。msgStr.ToString()
我尝试在不编码的情况下包含整个消息,但它抛出异常
【参考方案1】:
尝试添加 IsBodyHtml = true
new AE.Net.Mail.MailMessage
Subject = subject,
Body = bodyhtml,
From = new System.Net.Mail.MailAddress("myemail")
IsBodyHtml = true
;
【讨论】:
感谢重播,但收到此错误“AE.Net.Mail.MailMessage”不包含“IsBodyHtml”的定义 @user2764660,啊,对不起,没注意到AE,我以为是System.Net,等等,我去探索一下 @user2764660:这可能有助于***.com/questions/10866096/…【参考方案2】: MailMessage mail = new MailMessage();
mail.Subject = subject;
mail.Body = bodyhtml;
mail.From = new MailAddress("myemail");
mail.IsBodyHtml = true;
foreach (string add in vendorEmailList.Split(','))
if (string.IsNullOrEmpty(add))
continue;
mail.To.Add(new MailAddress(add));
foreach (string add in userEmailList.Split(','))
if (string.IsNullOrEmpty(add))
continue;
mail.CC.Add(new MailAddress(add));
foreach (string path in attachments)
//var bytes = File.ReadAllBytes(path);
//string mimeType = MimeMapping.GetMimeMapping(path);
Attachment attachment = new Attachment(path);//bytes, mimeType, Path.GetFileName(path), true);
mail.Attachments.Add(attachment);
MimeKit.MimeMessage mimeMessage = MimeMessage.CreateFromMailMessage(mail);
Message message = new Message();
message.Raw = Base64UrlEncode(mimeMessage.ToString());
var result = gmailService.Users.Messages.Send(message, "me").Execute();
经过大量努力,我找到了解决方案。而不是 AE.Net.Mail.MailMessage 使用 System.Net.Mail.MailMessage 和 MimeKit 将其转换为原始字符串。现在带有附件的 html 正文工作正常。
【讨论】:
想知道您是否在使用多个附件正确发送此邮件时遇到任何问题。一个附件对我来说效果很好,然后多个附件崩溃了。 抱歉回复晚了..我的代码适用于多个附件,没有任何问题。以上是关于如何在 ASP.NET 中使用具有 HTML 正文 + 附件的 GMAIL API 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.Net Web API 2 中使用 Owin OAuth2 修改令牌端点响应正文
如何在 asp.net 核心 webapi 控制器中读取请求正文?
如何在 ASP.NET Core 中间件中直接将响应正文设置为文件流?