可怕的ASP.NET郵件元件
這兩天在研究ASP.NET的使用者登入控制元件,在用PasswordRecovery這個控制元件時遇到了麻煩,就是郵件發不出去,也收不到。
我用過gmail,qq,126,sohu進行過測試。
按照MSDN的說法,先老老實實地在webconfig中配置了郵件傳送要用的一些必須資訊:
Code
上面的程式碼一看就知道是怎麼回事了,就是指定一個SMTP伺服器,然後給它一個賬號,可以用這個賬號來傳送郵件。
其中的defaultCredentials屬性需要注意,根據SMTP伺服器的不同,它可能是false,也可能是true。
搞定webconfig後,我便進行測試。
使用GMAIL作為傳送郵箱時,程式報錯是這樣的:
SMTP 伺服器要求安全連線或客戶端未通過身份驗證。 伺服器響應為: 5.7.0 Must issue a STARTTLS command first. d4sm305328tib.28
宣告一下,我所用來測試的郵箱都是可用的。
使用QQ郵箱時:
命令順序不正確。 伺服器響應為: Error: need EHLO and AUTH first !
使用126郵箱時:
郵箱不可用。 伺服器響應為: Óû§±»Ëø¶¨
(據說06年前註冊的126郵箱可以傳送,但由於我沒那種賬號,故也無法驗證真偽……)
使用搜狐郵箱時:
事務失敗。 伺服器響應為: 5.7.1 <chenru0576@gmail.com>: Relay access denied
(這個提示貌似不是搜狐SMTP的問題,而是說被要收的伺服器拒絕,chenru0576@gmail.com是我拿來接收的郵箱)
以上是我測試PasswordRecovery的結果,我沒寫一句程式碼,傳送郵件全是讓這個控制元件自己完成。
郵件傳送失敗率100%
然後我自己手寫程式碼,就是用System.Net.Mail.MailMessage與SmtpClient類進行傳送。
Code
MailMessage message = new MailMessage();
message.From = new MailAddress("testforms@sohu.com");
message.To.Add("chenru0576@gmail.com");
message.Subject = "test";
message.Body = "tttstest";
SmtpClient smtp = new SmtpClient("smtp.sohu.com");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("testforms@sohu.com", "123456");
smtp.Send(message);
以上程式碼可以實現郵件傳送,我同樣對上面的四種郵箱進行測試,只有搜狐的郵箱可以拿來傳送郵件,gmail和QQ郵箱都能夠收到。
到了這裡我就很納悶了,為什麼同樣使用搜狐的郵箱,PasswordRecovery控制元件卻發不出去,我真想看看它的原始碼是怎麼寫的,居然狗日的發不出去……
既然這樣,將PasswordRecovery控制元件的郵件傳送的那塊程式碼換成自己寫的程式碼不就行了?
確實如此。
新建一個類庫,繼承PasswordRecovery,過載它的OnSendingMail函式,寫上自己的程式碼。
Code
public class MyPswRecovery : PasswordRecovery
{
protected override void OnSendingMail(MailMessageEventArgs e)
{
e.Cancel = true;
SmtpClient smtp = new SmtpClient("smtp.sohu.com");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("testforms@sohu.com", "123456");
smtp.Send(e.Message);
}
}
OK!
經實驗,郵件確實可以傳送了,我也能收到。
但是……
其中存在著一個非常可怕的缺陷,就是非常的不穩定,有時候能發成功,有時候卻報錯,兩者比例大概2:1……
這樣的郵件傳送系統也太不可靠了吧……人家要做一個密碼取回的操作,要填安全提問等單子好幾遍,使用者會怎麼想?
於是我就考慮用本地機子做為SMTP伺服器,這樣是否會好一點?
實驗證明,
it gets worse……
傳送的過程中沒報任何錯誤,但我用gmail,qq,126郵箱進行接受測試,只有gmail才能收到郵件,發給qq的郵件全被扔在本地的badmail資料夾裡,而給126的則是宛如泥牛入海杳無音信……
太可怕了……
現在我對微軟的mail元件有點絕望了,正在下JMAIL,如果比微軟的好用的話,下半輩子的幸福就靠它了……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-558065/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASP.NET之郵件傳送ASP.NET
- asp.net傳送郵件程式ASP.NET
- ASP.net傳送郵件的例項ASP.NET
- 用ASP.NET設計高效郵件列表ASP.NET
- ASP.NET自動傳送郵件功能的實現ASP.NET
- 在ASP.NET中使用SMTPMail傳送郵件的方法ASP.NETAI
- asp.net 郵件傳送提醒功能(接收方包括QQ郵箱等)ASP.NET
- asp.net定時傳送郵件總結ASP.NET
- ASP.NET:郵件伺服器與客戶端ASP.NET伺服器客戶端
- 郵件營銷用純文字郵件還是html郵件HTML
- 郵件開發:接收解析郵件
- 在ASP.NET中傳送電子郵件的例項教程ASP.NET
- ASP.NET 2.0傳送電子郵件中存在的問題ASP.NET
- 郵件開發:複雜郵件的一個示例
- 【陳晨】ASP.NET 2.0中傳送電子郵件ASP.NET
- 用Jmail元件發郵件錯誤的解決辦法薦AI元件
- 發郵件的例子
- 郵件的傳送
- ASP.NET 2.0中傳送電子郵件剖析之一ASP.NET
- ASP.NET 2.0傳送電子郵件全面剖析之二ASP.NET
- 蘋果郵件蘋果
- 使用python傳送郵件和接收郵件Python
- postfix郵件系統之郵件客戶端無法收郵件問題解析客戶端
- 利用W3 JMAIL元件收POP3郵件 (轉)AI元件
- 脆弱的HTML郵件模板HTML
- Ubuntu的郵件傳送Ubuntu
- seafile QQ郵件的配置
- Java實現QQ郵件傳送郵件工具類Java
- 如何傳送電子郵件到別人郵箱?電子郵件傳送的方法
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- 郵件營銷容易成為垃圾郵件的原因及解決方法
- 你的郵件安全嗎? 電子郵件威脅與防禦剖析
- foxmail能收郵件,但是無法傳送郵件的問題AI
- 郵件傳送
- Laravel 郵件配置Laravel
- 群發郵件
- Java郵件(JavaMail)JavaAI
- shell發郵件