如何使用嵌入的图像创建HTML电子邮件并使用.net(c#)在默认邮件客户端中显示它?

如果您查看Windows中的Snip工具,可以选择将剪辑作为嵌入式附件发送到默认邮件客户端(我猜是一个html电子邮件)。我需要的确如此。 目前我使用简单的MAPI附加图像,但不允许嵌入。 一个关键要求是应该创建它,然后在默认邮件客户端中显示。我不认为我可以使用System.Net.Mail。或者我可以吗? 它是一个使用c#的WPF应用程序。 编辑:请在回答之前仔细阅读问题。我并不陌生。我知道如何在非托管代码中执行此操作而不诉诸黑客。我需要一个托管等价物。我不是在寻找黑客,我很乐意在必要时花大量时间在正确的解决方案上。     
已邀请:

bab

我不认为在mailto中你可以嵌入图像 请参阅RFC 2368.它表示mailto目的仅用于短文本消息而不用于MIME主体
   The special hname "body" indicates that the associated hvalue is the
   body of the message. The "body" hname should contain the content for
   the first text/plain body part of the message. The mailto URL is
   primarily intended for generation of short text messages that are
   actually the content of automatic processing (such as "subscribe"
   messages for mailing lists), not general MIME bodies.
    
将Process.Start与ShellExecute选项一起使用:
mailto:email@domain.com?subject=your+file&body=see attachment&attachment="C:pathtofile.txt"
我不确定路径周围的引号。 编辑 想到另一个应该有效的解决方案。 使用MailMessage创建HTML电子邮件 使用此处的答案将其保存为XXXX.eml 使用ShellExecute选项和
Process.Start
打开EML文件。 它应该在默认的电子邮件客户端中打开它。     
我认为你可以使用命名空间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电子邮件正文中,您输入“cid:xxxxx”而不是使用常规网址路径,其中xxxxx是您的内容ID。有关Content ID的更多详细信息,请查看RFC2111。从我在System.Net.Mail命名空间中看到的内容,它允许您创建一个将IsBodyHtml属性设置为true的MailMessage。然后,您需要做的下一件事是将附件添加到此MailMessage。附件当然是您的嵌入式图像。然后,您需要记住设置附件的ContentID。因此,为了确保您的HTML电子邮件引用正确的ContentID,事情应该可行。 再一次,我没有自己验证,但我快速检查了一些带有嵌入式图像的电子邮件。我确实看到了带有cid:xxxx作为图像源的电子邮件,我的Outlook客户端可以真正打开它。     

要回复问题请先登录注册