在 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="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規範,理論上主流郵件軟體及網路信箱應該都支援。