程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 利用OpenSmtp.Net發送需要smtp驗證的郵件

利用OpenSmtp.Net發送需要smtp驗證的郵件

編輯:.NET實例教程
1.引言
    下周,需要做一個發送電子郵件的模塊,磨刀不誤砍柴工,周末在家裡先做了一下測試,微軟在,net1.1中有System.Web.Mail空間,這個命名空間下可以發送不帶smtp驗證的電子郵件,不過現在網絡上很少再有不需要smtp驗證的,所以這個命名空間下的類應該算是比較雞肋。 於是找到opensmtp.Net這個開源項目,這個項目的admin是園子裡面的"我得女兒好漂亮",真誠感謝一下。
 2.本文宗旨
    本文並不是介紹openmail.net的使用方法,該開源項目是一個非常正規的項目,它自己具有詳細的文檔和使用方法。本文主要闡述再使用OpenMail或者.Net 2.0裡面的SmtpClIEnt的時候可能遇到的問題,這個問題跟你的運行環境有關系,如果你恰巧遇到這樣問題的時候,網上相關資料也比較少。我在下面就描述一下我遇到的問題以及歸納出來的解決辦法
3、在使用OpenMail或者SmtpClIEnt中可能遇到的問題
   1)在發送電子郵件的時候,提示“您主機中的軟件放棄已經建立的連接”
    這個是我遇到的最為頭疼的問題,因為他昨天晚上調到12點,搞的我差點沒瘋掉。起初,我知道一定是防火牆引起的問題,但是我把本地Windows xp內置防火牆關閉之後,問題依舊。但是無論我是否關閉防火牆,outlook都能正常接收和發送電子郵件,我用的是smtp.126.com,我直接telnet smtp.126.com 25或者在軟件中TcpClient client = new TcpClIEnt("smtp.126.com",25);都提示無法連接。而outlook卻能發送郵件,我netstat -n ,本機與smtp.126.com 25端口的tcp連接在outlook發送電子郵件的時候也建立了,但為什麼outlook能建立連接,我的軟件或者telnet為何不能?如何能讓我的軟件和telnet能連接smtp 服務器的25端口?
  2)第一個問題著實讓我浪費了很多時間,而且浪費了n多腦細胞,不過還好終於解決了,第二個問題是在發送電子郵件的時候,郵件的正文產生亂麻的問題,這個問題我看網上有人在問,不過很好解決。
4.解決問題的步驟和方法,以及經驗教訓
   1)對於第一個問題,我的確犯了一個方向性的錯誤,那就是我關閉了本機防火牆之後,我錯誤的認為導致我不能正常連接smtp服務器的原因在於smtp服務端的防火牆,而且我本地outlook能正常發送郵件極大的誤導了我的思路,我錯誤的任務,outlook能發送,那麼表示數據一定能從我本地出去。錯誤只能出現在服務端,我猜想可能outlook有特殊的技術能穿透smtp服務器的防火牆,但是我查閱了穿透防火牆的技術,如果要防火牆,一般的做法是HttpChannel,其實http請求本身不能穿透防火牆,但是一般防火牆不阻止對80端口的連接,smtp.126.com的80端口確也是關閉的。這樣的思路導致我在錯誤的方向用了很多功。
        今天早晨起來,我決定換個思路看看,我把本地防火牆關掉,還是不行,後來我看到了我的Macfee,是不是這厮搞得鬼那,我打開virtusScan Console,o,my god,裡面的確有一項On-Delivery E-Mail  Scanner ,我關閉它,發現還是不行,我有點失望了,不過還不甘心,再找,終於又發現了,在Access Protection裡面,有一個ports to block,裡面有25端口,日志文件保存在"AccessProtectionLog.txt",打開文件後有許多失敗記錄,去掉25端口阻塞,禁止On-Delivery E-Mail  Scanner ,問題解決
 2) 對於第二個問題,只需要更改編碼就可以了,在openmail.Net裡面設置MailMessage.CharSet,如果在中國,設置"gb2312"一般可以解決這個問題
5.結論
   經過兩天的調試和思考,解決的不是一個很大的問題,但是我也從中獲得了一個教訓,思考問題,一定要靈活,不要太過於固定化,比如我錯誤的認為是對方防火牆的問題,而且這種思路被我錯位的堅持了很久,其實在我們不能很好的解決一個問題的時候,與其費勁腦筋,不如反過來想想。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved