System.Web.Mail升級至System.Net.Mail的第一個問題

摘要:System.Web.Mail升級至System.Net.Mail的第一個問題

最近在寫一隻程式,當動作完成時,會寄信通知.

而這程式原本是從VS2003升級到VS2005的,有些語法過時的,就轉到VS2005的物件.

其中有一個物件在修改後,卻發現一個奇怪的地方.

信會寄不出來?而我在測試時,並沒有問題啊.

檢查了一下資料庫的郵件位址的資料.

發現存進去的資料格式不是只有單純的郵件位置,其格式如下:

使用者名稱<test@test.com>

如果有多郵件地址時,則是用分號;的方式來串接

使用者名稱1<test1@test.com

>;使用者名稱2<test2@test.com>

但這種格式在System.Web.Mail.MailMessage的方式寄信,並不會有問題.

改用System.Net.Mail.MailMessage的2.0新增的元件寄信,就會有問題產生了.

寫了一個小程式試了一下信件格式的問題.

使用MailMessage.To.Add("使用者名稱<test@test.com>"); 失敗,無法寄,會跳出"指定字串不在電子郵件地址的必要表單中"的錯誤訊息.

但如果是MailMessage.To.Add("Test<test@test.com>");則是可以順利寄出.

所以如果顯示名稱要用中文的話,就必需改一點寫法

MailMessage.To.Add(new MailAddress(("使用者名稱<test@test.com>"));

當然MailAddress可選其它的方法,把顯示名稱放到第二個參數內,但這做法就要修改整個資料庫的資料,或是改用資料截取的方式,如果不行,情願用System.Web.Mail來寫.

再來就是多收件者用分號;串接的方式.

System.Net.Mail也不支援,同樣會跳出"指定字串不在電子郵件地址的必要表單中"的錯誤訊息.

必需一個一個用MailMessage.To.Add的方式加進去.

所以整個修改後,大致上的程式碼如下 :

 try
{
    string[] toa = textBox1.Text.Trim().Split(";".ToCharArray());
    MailMessage newMail = new MailMessage();
    newMail .From = new MailAddress("訊息通知<info@XXX.com.tw">");
    newMail .Priority = MailPriority.Low;
    newMail .IsBodyHtml = true;
    newMail .Body = "TEST";
    foreach (string to in toa)
    {
        myMail.To.Add(new MailAddress(to));
     }
     newMail .Subject = "Test";

     SmtpClient sc = new SmtpClient("ext.mymail.com.tw");
     sc.Send(newMail );
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
}

還好,最後還是能寄了,不用改資料庫的資料,如果真的要改,那就改回去用System.Web.Mail~