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