2013年12月20日 星期五

[IIS] ASP.Net 撰寫發信程式時,IIS 應做的轉送設定

Reference:http://fannys23.pixnet.net/blog/post/23336484-%5Bwin%5D-asp.net-%E6%92%B0%E5%AF%AB%E7%99%BC%E4%BF%A1%E7%A8%8B%E5%BC%8F%E6%99%82%EF%BC%8Ciis-%E6%87%89%E5%81%9A%E7%9A%84%E8%BD%89%E9%80%81%E8%A8%AD

今天寫了支程式要送出信件,但是卻冒出了錯誤來。錯誤訊息是"System.Net.Mail.SmtpFailedRecipientException: 無法使用信箱。 伺服器回應為: 5.7.1 Unable to relay for xxx@xxx.xxx.xx",照著這一篇網誌設定,在 IIS 改成我自己的實體 IP,錯誤訊息又變成「傳送郵件失敗」

後來在同事的協助下才發現,是我弄錯了。我在程式裡是這樣寫的:
    Dim client As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient("127.0.0.1")
因此,我應該在 IIS 做如下設定(也可以參考這頁,有可能有你需要的其他訊息):

1. 打開「網際網路資訊服務 (IIS) 管理員」。(找不到的話,我都習慣在「開始」→「執行」→輸入「inetmgr」,就可以打開了)

2. 打開「網際網路資訊服務」→「本機電腦」→「預設 SMTP 虛擬伺服器」→右鍵「內容」。

3. 在「存取」頁籤,找到「轉接限制」的「轉接 (E)」,設定轉接限制。我是設定白名單(在「只有下列清單中的 (O)」新增我要允許的 IP),按下新增後輸入 127.0.0.1


按下確定後,我沒有重新啟動 IIS,直接重新整理網頁,程式即可正常發送信件。



另外,發寄 mail 時,在測試資料的收件人為英文名、寄件人為中文名時都沒有問題,就不疑有他的往下寫了。但是到了後來,當測試資料中收件者的名字為中文時,就冒出了「指定字串不在電子郵件地址的必要表單中」。在《System.Web.Mail升級至System.Net.Mail的第一個問題》裡找到方法,原來要改寫指定寄送對象的語句,來避免這個問題。

原本的寫法是長這樣(我在頁首已寫了 Imports System.Net.Mail):
            Dim Message As MailMessage = New MailMessage(strFrom, strRecipients, strSubject, strBody)

改寫成這樣就沒事囉。
            Dim Message As MailMessage = New MailMessage()
            Message.From = New MailAddress(strFrom)
            Message.To.Add(New MailAddress(strRecipients))
            Message.Subject = strSubject
            Message.Body = strBody


            Dim client As SmtpClient = New SmtpClient("127.0.0.1")
            client.Send(Message)
            Return "郵件已成功送出!"

沒有留言:

張貼留言