今天寫了支程式要送出信件,但是卻冒出了錯誤來。錯誤訊息是 "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 "郵件已成功送出!"
留言列表