這裡的重點是郵箱身份驗證那個地方,一定不能寫錯,否則,郵件發送不出去。到這裡,似乎是大功告成了,但是,你會發現,相同的程序,在某些機器上可以發送成功,在某些機器上發送總是失敗,是系統的原因?似乎不是,因為相同的系統,也是有的發送成功,有的發送失敗。那是,框架的原因?似乎也不是。
這裡就有一個很令人迷惑的現象出現,同樣的系統,同樣的框架,還是有的能發送成功,有的發送失敗。失敗的具體原因說是郵件標頭編碼有錯誤。那麼,我們去掉Subject,不寫,用默認的可以嗎?也是一樣的。這個問題很見鬼,於是使用EtherPeek進行抓包,發現了一個有趣的現象,這裡有一個很重要的包:
這裡要注意的是紅色劃線的地方,“EHLO xqxPC”,我的機器名就是xqxPC,問題就在這裡啦,SmtpClIEnt發送電子郵件的時候,需要發送一條EHLO指令到郵件服務器,參數是機器名,如果機器名使用中文,就發送不成功了。
簡單總結一下:
1、使用SmtpClient發送電子郵件是很簡單的,只要正確創建了MailMessage對象和SmtpClIEnt就可以很容易的發送出去電子郵件。
2、如果電子郵件服務器需要身份驗證【似乎現在都需要身份驗證,除非自己配置的】,注意下面這句話:
smtpClIEnt.Credentials = new System.Net.NetworkCredential("帳號@gmail.com", "密碼");
3、機器名不能使用中文。