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


而這程式原本是從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("ext2.genuine.com.tw");
     sc.Send(newMail );
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
}


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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jeffyeh 的頭像
    jeffyeh

    jeffyeh

    jeffyeh 發表在 痞客邦 留言(0) 人氣()