如何发送带有 html 附件的电子邮件

本文关键字:电子邮件 html 何发送 | 更新日期: 2023-09-27 18:19:23

ASP.NET/Mono MVC4 C# application.HTML文档需要通过电子邮件作为附件发送。

我试过了

        using (var message = new MailMessage("from@somebody.com",
            "to@somebody.com",
            "test",
            "<html><head></head><body>Invoice 1></body></html>"
            ))
        {
            message.IsBodyHtml = true;
            var client = new SmtpClient();
            client.Send(message);
        }

但 html 内容显示在邮件正文中。如何强制html内容显示为电子邮件附件?

更新

我尝试了异常答案,但文档仍然仅出现在邮件正文的Windows邮件中。

消息源显示它包含两个部分:

----boundary_0_763719bf-538c-4a37-a4fc-e4d26189b18b
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

----boundary_0_763719bf-538c-4a37-a4fc-e4d26189b18b
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

这两个部分具有相同的 base64 内容。如何强制 html 显示为附件?

邮件正文可以为空。

如何发送带有 html 附件的电子邮件

如果要将html作为附件发送,则必须将其添加到message AlternateView中,如图所示

AlternateView htmlView = AlternateView.CreateAlternateViewFromString
               ("<html><head></head><body>Invoice 1></body></html>", null, "text/html");
message.AlternateViews.Add(htmlView);

只需创建一个txtpdfhtml文档,您要将其作为附件发送,然后执行以下操作:-

message.Attachments.Add(new Attachment(@"c:'inetpub'server'website'docs'test.pdf"));

或者您可以从内存流创建附件(您可以根据需要更改示例代码(:-

System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.StreamWriter writer = new System.IO.StreamWriter(ms);
writer.Write("<html><head></head><body>Invoice 1></body></html>");
writer.Flush();
writer.Dispose();
System.Net.Mime.ContentType ct 
            = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Html);
System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms, ct);
attach.ContentDisposition.FileName = "myFile.html";
ms.Close();