用過C#內置的SMTP類的朋友大概知道,使用它發送郵件的時候,有時候總是出現莫名奇妙的錯誤,有時候可以發送成功,有時候說用戶帳號驗證失敗,即使你設置了帳號驗證信息,問題依舊,特別是在你使用QQ郵箱(好像163的用SMTP發送比較正常),基本上使用SMTP對象來發送郵件是不可能的事情,後來查詢了一些資料,說QQ的協議好像是ESMTP協議了,也就是加強版的SMTP協議,不知道是不是,反正用QQ郵件的人比較多,發送的問題就比較突出了。
特別是我的軟件“QQ號碼采集及郵件發送系統”,之前一直使用SMTP類來處理郵件的發送,客戶反映QQ郵件發送不成功的問題就特別突出,但是當時不知道如何處理這個問題,晚上找了很多資料,問題依舊,甚是頭痛。先看看我這個郵件發送軟件的界面先。
這個軟件目前已經實現了ESMTP協議的批量發送功能了,測試發現163也支持ESMTP協議,估計大多數的SMTP提供商都是支持這個接口的了,因為對他們來說這個是更加安全、更少垃圾郵件的協議,好像有的像我們日常所說的“實名制”規則一樣。
和SMTP類發送郵件不同,ESMTP是通過以流方式向服務器發送TCP/IP命令,進而獲得交互響應的模式進行的,如要連接SMTP服務器,首先通過下面代碼進行連接。
//連接網絡
try
{
tc = new TcpClient(mailserver, mailserverport);
}
catch (Exception e)
{
errmsg = e.ToString();
return false;
}
ns = tc.GetStream();
/// <summary>
/// 接收SMTP服務器回應
/// </summary>
protected string RecvResponse()
{
int StreamSize;
string ReturnValue = "false";
byte[] ReadBuffer = new byte[4096];
try
{
StreamSize = ns.Read(ReadBuffer, 0, ReadBuffer.Length);
}
catch
{
errmsg = "網絡連接錯誤";
return ReturnValue;
}
if (StreamSize == 0)
{
return ReturnValue;
}
else
{
&nb