zoukankan      html  css  js  c++  java
  • 通过代码在邮件中嵌入图片

    在一个开发需求中需要将一张图片嵌入邮件中并发送出去。

    正常的邮件发送代码(c#)如下:

    MailMessage mail = new MailMessage(from, to, subject, emailBody);

    如果需要邮件支持Html,需要将IsBodyHtml设置成true:mail.IsBodyHtml = true;

    1.第一个想到的方式是在emailBody中添加<img scr="">标签,但如果收到邮件的用户无法访问scr中的资源链接,将会导致图片无法访问。

    2.找到的第二种方式是data:image/png;base64,emailBody中的图片在浏览器中可以展示,但在outlook被屏蔽,无法查看。代码如下:

    <img src="data:image/png;base64,RAAAtuhhx4dbgYKAAA7...more data....." alt="test">
    string base64Str = Convert.ToBase64String(File.ReadAllBytes(@"C:Temp est.png"));

    3.第三种方式,是使用“cid:”,基本可以满足需求。代码如下:

    LinkedResource inline = new LinkedResource(@“C:Temp est.png”, MediaTypeNames.Image.Jpeg);
    inline.ContentId = Guid.NewGuid().ToString();
    string htmlBody = @"<img src='cid:" + inline.ContentId + @"' />";
    AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
    alternateView.LinkedResources.Add(inline);

    MailMessage mail = new MailMessage(from, to);
    mail.Subject = "subject";
    mail.IsBodyHtml = true;
    mail.AlternateViews.Add(alternateView);

    SmtpClient smtp = new SmtpClient("127.0.0.1");
    smtp.Send(mail);

    实现中多出了两个概念LinkedResource和AlternateView。

    LinkResouce表示电子邮件附件中嵌入的外部资源,比如图片。但此类资源不是以附件形式展示在邮件中。如需附件需要使用Attachment

    AlternateView可以指定一个电子邮件的不同格式副本。

    参考:

    http://stackoverflow.com/questions/18358534/send-inline-image-in-email

    https://sendgrid.com/blog/embedding-images-emails-facts/

  • 相关阅读:
    A
    B
    C
    I
    公共最大字串长度
    docker run 的背后的故事(zz)
    python之多并发socket(zz)
    Python垃圾回收机制:gc模块(zz)
    我要做的git的分享(zz)
    SpringMVC框架入门配置 IDEA下搭建Maven项目(zz)
  • 原文地址:https://www.cnblogs.com/dingtingli/p/5092500.html
Copyright © 2011-2022 走看看