如何在 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 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 css 在电子邮件正文中发送网页

如何在 Asp.Net Web API 2 中使用 Owin OAuth2 修改令牌端点响应正文

如何在 asp.net 核心 webapi 控制器中读取请求正文?

如何在 ASP.NET Core 中间件中直接将响应正文设置为文件流?

如何在 POST 正文中为 asp.net WebAPI POST 路由格式化 XML

如何在 asp net core 2.2 中间件中多次读取请求正文?