使用C#發送正文帶圖片郵件


      最近有個地方用到正文帶圖片的郵件發送功能,由於發送郵件調用的是web service,要求正文必須是string,而接收方要能看到圖片,還不能單純的添加一個圖片地址鏈接,查閱了很多資料,基本上都是從頭寫郵件發送類,以附件的形式上傳圖片然后替換這么個思路,不適合我目前的需求。思考了很久:不管是圖片也好,文字也好還是其他的什么文件,在網路上傳輸肯定都是數據流,無非是到了目的地數據流每一段解析的方式不同而已,那么能不能將郵件發送數據看成是一個數據流,文字和圖片都在里面呢?

      使用OUTLOOK發送了一個帶圖片的郵件,收到之后另存MHT分析其代碼:

      發現帶圖片img標簽的src屬性后面是一大堆字符<img alt="" src="data:image/png;base64, SkZJRgABAQEAZA…" />,那這個"亂碼"肯定就是圖片了!

      再次查閱了一些資料得知郵件在網路上傳輸一般都要通過base 64編碼,然后直接賦給src

Data URI scheme是在RFC2397中定義的,目的是將一些小的數據,直接嵌入到網頁中,從而不用再從外部文件載入。在上面的Data URI中,data表示取得數據的協定名稱,image/png 是數據類型名稱,base64 是數據的編碼方法,逗號后面就是這個image/png文件base64編碼后的數據。

 

      這就好辦了,先實現將圖片轉換為"字符串"替換到那個位置不就OK了?

      base 64編碼方法:

 

Bitmap bmp = new Bitmap(Imagefilename);

MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();

String strbaser64 = Convert.ToBase64String(arr);

 

Imagefilename是圖片路徑

strbaser64是編碼后的字符串

然后寫HTML郵件正文:

 

<BODY style="MARGIN: 10px"><DIV><IMG src="data:image/png;base64, SkZJRgABAQEAZA…"> </IMG></DIV></BODY>

 

將轉換成為字符串的圖片放到這個位置:下圖是我在163信箱做的實驗(注意要切換到HTML源碼試圖下)

 

點擊發送,然后過去收:

 

 

發現已經還原成為圖片了,初步實驗成功。

然后再試試使用代碼發送,簡單發送代碼如下:

 

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.163.com");

client.UseDefaultCredentials = true;//設置為發送認證消息

client.Credentials = new System.Net.NetworkCredential("用戶名", "密碼");//認證消息

System.Net.Mail.MailMessage mess = new System.Net.Mail.MailMessage();

mess.From = new System.Net.Mail.MailAddress("shiyeping@163.com", "發信人的名稱");

mess.To.Add(new System.Net.Mail.MailAddress("shiyeping@163.com", "收信人的名稱"));

mess.Subject = "主題";

mess.IsBodyHtml = true;

mess.Body = "HTML格式的正文";

try

{

client.Send(mess);

MessageBox.Show("發送成功完成");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

 

正文用變量表示如下:

 

string mailBody = "<BODY style=\"MARGIN: 10px\"><DIV><IMG src=\"data:image/png;base64,/9j/4AAQSkZ….WRN6iXizpJL//Z\"> </IMG></DIV></BODY> ";

 

*注意轉義

發送成功之后再去郵箱就可以看到圖片已經正常顯示出來了:

 

同樣道理,如果要在郵件正文里面加一個視頻?FLASH 動畫?聲音?…?

我沒試,如果你有興趣可以試試,我只是推理!

附測試代碼下載:點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM