MailMessage保存為eml文件(C#+SmtpClient)
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
.NET 自從2.0開始,大大提升了 Mail.SmtpClient 的功能,對(duì)于發(fā)郵件,可謂游刃有余了。但是,美中不足的是沒有提供保存郵件內(nèi)容為eml文件的功能。 實(shí)際上,SmtpClient 和 MailMessage 已經(jīng)實(shí)現(xiàn)了這個(gè)功能,只是這個(gè)功能是 NonPublic 的,對(duì)于空間外,不可見而已。 利用 Reflector 反編譯一下 System.Net.Mail.SmtpClient 可以看到:
在 Send(MailMessage) 方法中,在MAIL被發(fā)送之前,是調(diào)用了一個(gè) MailWriter fileMailWriter = this.GetFileMailWriter(this.PickupDirectoryLocation); 我們順藤摸瓜,繼續(xù)定位 GetFileMailWriter 這個(gè)方法
上面的代碼中,赫然醒目的顯示著 .eml ,看了里面的邏輯,我們其實(shí)就清楚了,SmtpClient.Send 之前,也是先生成了一個(gè)臨時(shí)的eml文件,然后再發(fā)送這個(gè)文件出去的。 其中的關(guān)鍵就在 new MailWriter(new FileStream(str2, FileMode.CreateNew)) 這里。 我們接下來定位到我們的核心 MailWriter :
從上面可以看到,MailWriter 是一個(gè) internal 的 class,所以我們?cè)谄胀ǖ恼{(diào)用Mail.SmtpClient 等的命名空間下,是看不到的,這時(shí)我們就需要用到反射(Reflection) 了。 下面給出完整的實(shí)現(xiàn)代碼: using System; /// <summary> 使用方法: MailMessage msg = new MailMessage(); 好了 ,完結(jié)了,祝大家好運(yùn)吧! 該文章在 2017/11/7 17:23:46 編輯過
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |