我认为您可以使用命名空间 System.Net.Mail 中的类来完成这项工作。这需要相当多的工作。我将把它留作读者练习。
根据RFC2111,带有嵌入图像的 HTML 电子邮件只是将 HTML 电子邮件正文和图像附件存储在两个不同的 MIME 内容中。
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Mime-Version: 1.0
Content-Type: multipart/related; boundary="boundary-example-1";
type=Text/HTML
--boundary-example 1
Content-Type: Text/HTML; charset=US-ASCII
... text of the HTML document, which might contain a hyperlink
to the other body part, for example through a statement such as:
<IMG SRC="cid:foo4*foo1@bar.net" ALT="IETF logo">
--boundary-example-1
Content-ID: foo4*foo1@bar.net
Content-Type: IMAGE/GIF
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--boundary-example-1--
关键在于,在您的 HTML 电子邮件正文中,您不是使用常规 URL 路径,而是输入“cid:xxxxx”,其中 xxxxx 是您的内容 ID。有关 Content ID 的更多详细信息,请查看RFC2111。根据我在 System.Net.Mail 命名空间中看到的内容,它允许您创建一个将 IsBodyHtml 属性设置为 true 的 MailMessage。然后,您需要做的下一件事是将附件添加到此 MailMessage。附件当然是您嵌入的图像。然后,您需要记住设置附件的 ContentID。因此,为了确保您的 HTML 电子邮件引用了正确的 ContentID,这些东西应该可以正常工作。
同样,我自己并没有验证它,但我快速检查了一些嵌入图像的电子邮件。我确实看到了带有 cid:xxxx 作为图像源的电子邮件,我的 Outlook 客户端确实可以很好地打开它。