在 Outlook 寫信時,直接在文字穿插圖片是再自然也不過的事(如下圖),但是用 C# 程式走 SMTP 寄信,夾帶附檔的經驗很多,直接在內文內嵌圖檔倒是沒試過。

很快在 Stackoverflow 查到範例,照方煎藥,就寄出像上面圖文並茂的信件了:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;

namespace EmbImgMail
{
    class Program
    {
        static void Main(string[] args)
        {
            var mail = new MailMessage();
            mail.IsBodyHtml = true;

            //建立連結資源
            var res = new LinkedResource("netcore3.png");
            res.ContentId = Guid.NewGuid().ToString();
            //使用<img src="/img/loading.svg" data-src="cid:..."方式引用內嵌圖片
            var htmlBody = $@"
<div>.NET Core 3 架構圖如下:</div>
<div><img src='cid:{res.ContentId}'/></div>";
            //建立AlternativeView
            var altView = AlternateView.CreateAlternateViewFromString(
                htmlBody, null, MediaTypeNames.Text.Html);
            //將圖檔資源加入AlternativeView
            altView.LinkedResources.Add(res);
            //將AlternativeView加入MailMessage
            mail.AlternateViews.Add(altView);
            //設定寄件人收件人主旨
            mail.To.Add("jeffrey@mail.com");
            mail.From = new MailAddress("jeffrey@mail.com");
            mail.Subject = "內嵌圖檔測試";
            //送出郵件
            SmtpClient smtp = new SmtpClient("relayServerIp");
            smtp.Send(mail);
        }
    }
}

補充,AlternativeView 源自 RFC2046 規範,理論上主流郵件軟體及網路信箱應該都支援。

Sample code of sending image-embedded email with C#.


Comments

# by Tony Wei

讚喔 ^^b

Post a comment