簡體   English   中英

如何使用.net(c#)創建帶有嵌入圖像的HTML電子郵件並將其顯示在默認郵件客戶端中?

[英]How to create HTML email with embeded image and show it in the default mail client using .net (c#)?

如果您在Windows中查看“片段”工具,則可以選擇將片段作為嵌入式附件發送到默認郵件客戶端(我想是html電子郵件)中。 我確實需要。

目前,我正在使用簡單的MAPI附加圖像,但不允許嵌入。

一項關鍵要求是應先創建它,然后將其顯示在默認郵件客戶端中。 我認為我不能使用System.Net.Mail。 或者我可以嗎?

它是使用c#的WPF應用程序。

編輯:在回答之前,請仔細閱讀問題。 我對此並不陌生。 我知道如何在非托管代碼中執行此操作而不求助於駭客。 我需要一個托管等效項。 不是在尋找黑客,如果有必要,我很樂意花費大量時間在正確的解決方案上。

我認為在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 with ShellExecute選項:

mailto:email@domain.com?subject=your+file&body=see attachment&attachment="C:\path\to\file.txt"

我不確定路徑周圍的引號。

編輯

只是想到了另一個可行的解決方案。

  1. 使用MailMessage創建HTML電子郵件
  2. 使用此處的答案將其另存為XXXX.eml
  3. 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”代替常規URL路徑,其中xxxxx是您的Content ID。 有關內容ID的更多詳細信息,請參閱RFC2111 根據我在System.Net.Mail命名空間中看到的內容,它允許您創建IsBodyHtml屬性設置為true的MailMessage。 然后,您需要做的下一件事是將附件添加到此MailMessage。 附件當然是您的嵌入式圖像。 然后,您需要記住設置附件的ContentID。 因此,只要確保您的HTML電子郵件引用了正確的ContentID,一切就可以正常進行。

同樣,我自己也沒有驗證它,但是我對其中一些帶有嵌入式圖像的電子郵件進行了快速檢查。 我確實看到以cid:xxxx作為圖像源的電子郵件,而我的Outlook客戶端確實可以正常打開它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM