2008年12月2日 星期二

System.Net.Mail 發個完美的 Mail 怎麼這麼難?

以前VB時代我們用CDO,.Net 1時代用 System.Web.Mail 股子裡還是陽春的 CDO
但到了.Net 2.0以後的時代,換成了 System.Net.Mail 我原本已經非常的滿意了
可以使用認證,也可以編碼,也可以用SSL連GMAIL

可是問題就出在

1.收件人的欄位不可以是英文以外的字,原因出在 MailAddress 的 ToString()方法上
例如:以下這行就會出錯
new MailAddress("def@abc.com", "測試收件人", Encoding.UTF8)
錯誤訊息為:
System.Net.Mail.SmtpException: 傳送郵件失敗。 ---> System.FormatException: 郵件標頭中找到無效的字元。
目前沒有解法,只能用其他的元件替代,不然就是等 MS 出更新程式
參考資料如下:
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=4168752&SiteID=14

http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=3522218&SiteID=14

http://columns.chicken-house.net/post/e58e9fe4be86-SystemNetMail-e4b99fe69c83e69c89-Bug-.aspx

http://support.microsoft.com/kb/947323/en-us

2.如果你是用 BIG5 去編碼收件者,那你會遇到"奇","寶"等字會出現"?"
例如:new MailAddress("def@abc.com", "寶貝", Encoding.UTF8)
這樣對方收到的信件的收件者就會變成 "?貝"
因為 System.Net.Mail 在設定 Envelop Header 時現在還是只能使用的 Quoted-Printable 編碼,如果可以選擇 Base64 問題就會迎刃而解!可惜到 .NET 3.5 還是沒有將這問題解決!
目前也沒有解法,只能希望大家多用 UTF-8 囉
參考資料如下:
http://blog.miniasp.com/post/2008/02/05/SystemWebMail-too-weak-and-SystemNetMail-has-problem.aspx

http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=1534507&SiteID=14

http://forums.microsoft.com/MSDN-CHT/Search/Search.aspx?words=CDO&SiteID=14&searchscope=allforums

以上兩點希望對其他也遇到困難的有幫助
PS:也許可以用OpenSmtp來解決問題

沒有留言: