繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> 更新后的邮件发送类,支持SMTP认证功能。暂时还没有加附件的功能和抄送、暗送。

更新后的邮件发送类,支持SMTP认证功能。暂时还没有加附件的功能和抄送、暗送。

2007-08-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:主要是为了自己使用,大家可以自己去扩充。 全部代码: using System; using System.Text; using System.IO; using System.Net; using System.Net.Sockets; namespace OSLeagueForumXP.Components { /// /// Tc...

主要是为了自己使用,大家可以自己去扩充。

全部代码:

using System;

using System.Text;

using System.IO;

using System.Net;

using System.Net.Sockets;

namespace OSLeagueForumXP.Components

{

///

/// TcpClient派生类,用来进行SMTP服务器的连接工作

///

public class SMTPClient : TcpClient

{

///

/// 进行SMTP服务器的连接

///

public SMTPClient()

{

}

///

/// 是否以连接

///

/// 连接为True,不连接为False

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 Message,string SMTPCode)

{

return(Message.IndexOf(SMTPCode,0,10)==-1)?false:true;

}

} //结束类

///

/// 发送邮件类

///

public class SMTPMail

{

///

/// 错误反馈信息

///

private string strErrMessage = null;

///

/// SMTP服务器反馈的信息

///

private string strResponse;

///

/// 构造函数

///

public SMTPMail()

{

strErrMessage = "";

strResponse = "";

}

///

/// 取得错误反馈信息

///

public string ErrorMessage

{

get

{

return strErrMessage ;

}

}

///

/// 取得SMTP服务器反馈的信息

///

public string ServerResponse

{

get

{

return strResponse;

}

}

///

/// 邮件发送优先级

///

public enum Prioritys

{

///

/// 最高级别

///

HIGH = 1,

///

/// 默认级别

///

NORMAL = 3,

///

/// 最低级别

///

LOW = 5

}

///

/// 进行BASE64编码

///

/// 数据

/// 字符串

private string Encode(string Data)

{

byte[] bteData;

bteData = Encoding.Default.GetBytes(Data);

return Convert.ToBase64String(bteData);

}

///

/// 进行BASE64解码

///

/// 数据

/// 字符串

private string Decode(string Data)

{

byte[] bteData;

bteData = Convert.FromBase64String(Data);

return Encoding.Default.GetString(bteData);

}

///

/// 发送邮件

///

/// SMTP服务器

/// SMTP服务器端口

/// 邮件发送者

/// 显示的发送者名称

/// 是否进行认证

/// 认证用户名

/// 认证密码

/// 邮件接收者

/// 显示的接收者名称

/// 优先级

/// 是否为HTML

/// URL

/// 邮件主题

/// 邮件内容

public void SendMail(string SmtpHost,int Port,string From,string DisplayFromName,bool Authentication,string UserName,string Password,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 ;

}

int intBuffer = 0;

int intArray = 0;

if(Authentication)

{

intBuffer = 9;

}

else

{

intBuffer = 6;

}

string[] strSendBuffer = new string[intBuffer];

string[] strResponseCode = {"220","250","251","354","221","334","235"}; // success codes from SMTP server

string strData = "";

strData = string.Concat("HELO ",SmtpHost);

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

if(Authentication)

{

strData = "";

strData = string.Concat("AUTH LOGIN","\r\n");

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

strData = "";

strData = string.Concat(Encode(UserName),"\r\n");

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

strData = "";

strData = string.Concat(Encode(Password),"\r\n");

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

}

strData = "";

strData = string.Concat("MAIL FROM: ","<" + From + ">" + "AUTH=" + From);

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

strData = "";

strData = string.Concat("RCPT TO: ","<" + To + ">");

strData = string.Concat(strData,"\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

strData = "" ;

strData = string.Concat("DATA","\r\n");

strSendBuffer[intArray] = strData ;

intArray = intArray+1;

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[intArray] = strData;

intArray = intArray+1;

strData = "" ;

strData = string.Concat(strData,"QUIT\r\n");

strSendBuffer[intArray] = strData;

intArray = intArray+1;

int i = 0 ;

while(i < strSendBuffer.Length)

{

smtpcMail.SendCommandToServer(strSendBuffer[i]);

strResponseNumber = smtpcMail.GetServerResponse();

for(int j=0;j

{

if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,strResponseCode[j]))

{

this.strResponse += strResponseNumber;

this.strResponse += "
";

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;

}

} //结束邮件发送方法

} // 结束类

}

责任编辑:admin
相关文章