主要是為了自己使用,大家可以自己去擴充。
全部代碼:
using system;
using system.text;
using system.io;
using system.net;
using system.net.sockets;
namespace osleagueforumxp.components
{
/// <summary>
/// tcpclient派生類,用來進行smtp服務器的連接工作
/// </summary>
public class smtpclient : tcpclient
{
/// <summary>
/// 進行smtp服務器的連接
/// </summary>
public smtpclient()
{
}
/// <summary>
/// 是否以連接
/// </summary>
/// <returns>連接為true,不連接為false</returns>
public bool isconnected()
{
return active;
}
/// <summary>
/// 向服務器發送命令
/// </summary>
/// <param name="command">命令</param>
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 ;
}
/// <summary>
/// 取得服務器反饋信息
/// </summary>
/// <returns>字符串</returns>
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;
}
} //結束類
/// <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
}
/// <summary>
/// 進行base64編碼
/// </summary>
/// <param name="data">數據</param>
/// <returns>字符串</returns>
private string encode(string data)
{
byte[] btedata;
btedata = encoding.default.getbytes(data);
return convert.tobase64string(btedata);
}
/// <summary>
/// 進行base64解碼
/// </summary>
/// <param name="data">數據</param>
/// <returns>字符串</returns>
private string decode(string data)
{
byte[] btedata;
btedata = convert.frombase64string(data);
return encoding.default.getstring(btedata);
}
/// <summary>
/// 發送郵件
/// </summary>
/// <param name="smtphost">smtp服務器</param>
/// <param name="port">smtp服務器端口</param>
/// <param name="from">郵件發送者</param>
/// <param name="displayfromname">顯示的發送者名稱</param>
/// <param name="authentication">是否進行認證</param>
/// <param name="username">認證用戶名</param>
/// <param name="password">認證密碼</param>
/// <param name="to">郵件接收者</param>
/// <param name="displaytoname">顯示的接收者名稱</param>
/// <param name="priority">優先級</param>
/// <param name="html">是否為html</param>
/// <param name="base">url</param>
/// <param name="subject">郵件主題</param>
/// <param name="message">郵件內容</param>
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<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;
}
} //結束郵件發送方法
} // 結束類
}