网上看到这个类写的还行!但是为什么使用socket发邮件不要认证和账号密码呢!
请高手指点!急用!100分送上!
邮件发送类,支持HTML格式,支持优先级设置。通过SOCKET类实现的
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace Blood.Com.ClassLib

/// <summary>
/// TcpClient派生类,用来进行SMTP服务器的连接工作
/// </summary>
public class SMTPClient : TcpClient
{
public bool isConnected()
{
return Active;
}public void SendCommandToServer(string Command)
{
NetworkStream ns = this.GetStream() ;
byte[] WriteBuffer ;
WriteBuffer = new byte[1024] ;
WriteBuffer = Encoding.Default.GetBytes(Command) ;
ns.Write(WriteBuffer,0,WriteBuffer.Length);
return ;

public string GetServerResponse()
{
int StreamSize ;
string ReturnValue = "" ;
byte[] ReadBuffer ;
NetworkStream ns = this.GetStream() ;
ReadBuffer = new byte[1024] ;
StreamSize = ns.Read(ReadBuffer,0,ReadBuffer.Length);
if (StreamSize==0)
{
return ReturnValue ;
}
else
{
ReturnValue = Encoding.Default.GetString(ReadBuffer);
return ReturnValue;

}public bool DoesStringContainSMTPCode(string s,string SMTPCode)
{
return(s.IndexOf(SMTPCode,0,10)==-1)?false:true;
}} //结束类/// <summary>
/// 发送邮件类
/// </summary>
public class SMTPMail
{
/// <summary>
/// 错误反馈信息
/// </summary>
private string strErrMessage = null;/// <summary>
/// SMTP服务器反馈的信息
/// </summary>
private string strResponse;/// <summary>
/// 构造函数
/// </summary>
public SMTPMail()
{
strErrMessage = "";
strResponse = "";
}/// <summary>
/// 取得错误反馈信息
/// </summary>
public string ErrorMessage
{
get
{
return strErrMessage ;
}
}/// <summary>
/// 取得SMTP服务器反馈的信息
/// </summary>
public string ServerResponse
{
get
{
return strResponse;
}
}/// <summary>
/// 邮件发送优先级
/// </summary>
public enum Prioritys
{
/// <summary>
/// 最高级别
/// </summary>
HIGH = 1,
/// <summary>
/// 默认级别
/// </summary>
NORMAL = 3,
/// <summary>
/// 最低级别
/// </summary>
LOW = 5
}public void SendMail(string SmtpHost,int Port,string From,string DisplayFromName,string To,string DisplayToName,Prioritys Priority,bool Html,string Base,string Subject,string Message)
{
try
{
string strResponseNumber;
SMTPClient smtpcMail = new SMTPClient();
smtpcMail.Connect(SmtpHost,Port);
bool bolConnect = smtpcMail.isConnected();//判断是否进行了连接
if (!bolConnect)
{
strErrMessage = "Smtp服务器连接失败...";
return;
}//读取反馈信息
strResponseNumber = smtpcMail.GetServerResponse();
if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,"220"))
{
this.strResponse += strResponseNumber;
}
else
{
this.strErrMessage = "连接失败" + strResponseNumber;
return ;
}string[] strSendBuffer = new string[6];
string[] strResponseCode = {"220","250","251","354","221"}; // success codes from SMTP serverstring strData = "";
strData = string.Concat("HELO ",SmtpHost);
strData = string.Concat(strData,"\r\n");
strSendBuffer[0] = strData ;strData = "";
strData = string.Concat("MAIL FROM: ","<" + From + ">");
strData = string.Concat(strData,"\r\n");
strSendBuffer[1] = strData;strData = "";
strData = string.Concat("RCPT TO: ","<" + To + ">");
strData = string.Concat(strData,"\r\n");
strSendBuffer[2] = strData;strData = "" ;
strData = string.Concat("DATA","\r\n");
strSendBuffer[3] = strData ;strData = "" ;
strData = string.Concat("From: ",DisplayFromName + "<" + From + ">");
strData = string.Concat(strData,"\r\n" );
strData = string.Concat(strData,"To: " );
strData = string.Concat(strData,DisplayToName + "<" + To + ">");
strData = string.Concat(strData,"\r\n" );
strData = string.Concat(strData,"Subject: " );
strData = string.Concat(strData,Subject);
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"MIME-Version: 1.0" );
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"X-Priority: " + Priority);
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"X-MSMail-Priority: " + Priority);
strData = string.Concat(strData,"\r\n");
if(Html == true)
{
strData = string.Concat(strData,"Content-Type: text/html;" );
}
else
{
strData = string.Concat(strData,"Content-Type: text/plain;" );
}
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"charset=\"iso-8859-1\"" );
strData = string.Concat(strData,"\r\n");
if(Html == true)
{
strData = string.Concat(strData,"Content-Transfer-Encoding: text/html;" );
}
else
{
strData = string.Concat(strData,"Content-Transfer-Encoding: text/plain;" );
}
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"Content-Base: \"" + Base + "\"" );
strData = string.Concat(strData,"\r\n" + "\r\n");strData = string.Concat(strData,Message);
strData = string.Concat(strData,"\r\n.\r\n");
strSendBuffer[4] = strData;strData = "" ;
strData = string.Concat(strData,"QUIT\r\n");
strSendBuffer[5] = strData;int i = 0 ;while(i < strSendBuffer.Length)
{
smtpcMail.SendCommandToServer(strSendBuffer[i]);
strResponseNumber = smtpcMail.GetServerResponse();for(int j=0;j<strResponseCode.Length;j++)
{
if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,strResponseCode[j]))
{
this.strResponse += strResponseNumber;
this.strResponse += "<br>";
break;
}
else
{
if(j==strResponseCode.Length-1)
{
this.strErrMessage += strResponseNumber;
this.strErrMessage += strSendBuffer[i];
return;
}
}
}i++ ;
} // 结束循环
}
catch(SocketException err)
{
this.strErrMessage += err.Message + " " + err.StackTrace;
}
catch(Exception e)
{
this.strErrMessage += e.Message + " " + e.StackTrace;
}
} //结束邮件发送方法} // 结束类} // 结束Namespace

解决方案 »

  1.   

    稍微修改了一下,貌似不能用!*****为邮箱密码!
    string strData = "";
                    strData = string.Concat("HELO ", "smtp.126.com");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[0] = strData;                strData = "";
                    strData = string.Concat("AUTH LOGIN ", "smtp.126.com");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[1] = strData;                strData = "";
                    strData = string.Concat(Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("moon5284")), "smtp.126.com");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[2] = strData;                strData = "";
                    strData = string.Concat(Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes("******")), "smtp.126.com");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[3] = strData;                strData = "";
                    strData = string.Concat("MAIL FROM: ", "<" + "[email protected]" + ">");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[4] = strData;                strData = "";
                    strData = string.Concat("RCPT TO: ", "<" + "[email protected]" + ">");
                    strData = string.Concat(strData, "\r\n");
                    strSendBuffer[5] = strData;                strData = "";
                    strData = string.Concat("DATA", "\r\n");
                    strSendBuffer[6] = strData;                strData = "";
                    strData = string.Concat("From: ", "尼玛" + "<" + "[email protected]" + ">");
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "To: ");
                    strData = string.Concat(strData, "你妹" + "<" + "[email protected]" + ">");
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "Subject: ");
                    strData = string.Concat(strData, "尼玛+你妹");
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "MIME-Version: 1.0");
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "X-Priority: " + 3);
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "X-MSMail-Priority: " + 3);
                    strData = string.Concat(strData, "\r\n");
                    //if (Html == true)
                    //{
                        strData = string.Concat(strData, "Content-Type: text/html;");
                    //}
                    //else
                    //{
                    //    strData = string.Concat(strData, "Content-Type: text/plain;");
                    //}
                    strData = string.Concat(strData, "\r\n");
                    strData = string.Concat(strData, "charset=\"iso-8859-1\"");
                    strData = string.Concat(strData, "\r\n");
                    //if (Html == true)
                    //{
                        strData = string.Concat(strData, "Content-Transfer-Encoding: text/html;");
                    //}
                    //else
                    //{
                    //    strData = string.Concat(strData, "Content-Transfer-Encoding: text/plain;");
                    //}
                    //strData = string.Concat(strData, "\r\n");
                    //strData = string.Concat(strData, "Content-Base: \"" + Base + "\"");
                    //strData = string.Concat(strData, "\r\n" + "\r\n");                strData = string.Concat(strData, "<font color=\"red\">尼玛+你妹</font>");
                    strData = string.Concat(strData, "\r\n.\r\n");
                    strSendBuffer[7] = strData;                strData = "";
                    strData = string.Concat(strData, "QUIT\r\n");
                    strSendBuffer[8] = strData;
      

  2.   

    .NET 自带了一个 System.Net.Mail.SmtpClient
    为什么还要去网上找别的代码呢?
      

  3.   

    非用socket不可!因为有些需求Net.Mail不能实现!