国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

向廣大C#愛好者推薦一個很好使的MAIL CLASS

2024-07-21 02:18:21
字體:
來源:轉載
供稿:網友


收集最實用的網頁特效代碼!

using system;
using system.text;
using system.io;
using system.net;
using system.net.sockets;
using system.collections;

namespace lion_office.data.library.mailclass
{
/*
create by lion
2002-11-20 01:44
copyright (c) 2001,2002 www.lionsky.net. all rights reserved.
web: http://www.lionsky.net
email: [email protected]
support .net framework beta 2
*/
public class esmtpmail
{
private string enter="/r/n";
/// <summary>
/// 設定語言代碼,默認設定為gb2312,如不需要可設置為""
/// </summary>
public string charset="gb2312";
/// <summary>
/// 發件人地址
/// </summary>
public string from="";
/// <summary>
/// 發件人姓名
/// </summary>
public string fromname="";
/// <summary>
/// 回復郵件地址
/// </summary>
//public string replyto="";
/// <summary>
/// 收件人姓名
/// </summary>
public string recipientname="";
/// <summary>
/// 收件人列表
/// </summary>
private hashtable recipient=new hashtable();
/// <summary>
/// 郵件服務器域名
/// </summary>
private string mailserver="";
/// <summary>
/// 郵件服務器端口號
/// </summary>
private int mailserverport=25;
/// <summary>
/// smtp認證時使用的用戶名
/// </summary>
private string username="";
/// <summary>
/// smtp認證時使用的密碼
/// </summary>
private string password="";
/// <summary>
/// 是否需要smtp驗證
/// </summary>
private bool esmtp=false;
/// <summary>
/// 是否html郵件
/// </summary>
public bool html=false;
/// <summary>
/// 郵件附件列表
/// </summary>
private system.collections.arraylist attachments;
/// <summary>
/// 郵件發送優先級,可設置為"high","normal","low"或"1","3","5"
/// </summary>
private string priority="normal";
/// <summary>
/// 郵件主題
/// </summary>
public string subject="";
/// <summary>
/// 郵件正文
/// </summary>
public string body="";
/// <summary>
/// 收件人數量
/// </summary>
private int recipientnum=0;
/// <summary>
/// 最多收件人數量
/// </summary>
private int recipientmaxnum=1;
/// <summary>
/// 密件收件人數量
/// </summary>
//private int recipientbccnum=0;
/// <summary>
/// 錯誤消息反饋
/// </summary>
private string errmsg;
/// <summary>
/// tcpclient對象,用于連接服務器
/// </summary>
private tcpclient tc;
/// <summary>
/// networkstream對象
/// </summary>
private networkstream ns;
/// <summary>
/// smtp錯誤代碼哈希表
/// </summary>
private hashtable errcodeht = new hashtable();
/// <summary>
/// smtp正確代碼哈希表
/// </summary>
private hashtable rightcodeht = new hashtable();
public esmtpmail()
{
attachments = new system.collections.arraylist();
}
/// <summary>
/// 郵件服務器域名和驗證信息
/// 形如:"user:[email protected]:25",也可省略次要信息。如"user:[email protected]"或"www.server.com"
/// </summary>
public string maildomain
{
set
{
string maidomain=value.trim();
int tempint;

if(maidomain!="")
{
tempint=maidomain.indexof("@");
if(tempint!=-1)
{
string str=maidomain.substring(0,tempint);
mailserverusername=str.substring(0,str.indexof(":"));
mailserverpassword=str.substring(str.indexof(":")+1,str.length-str.indexof(":")-1);
maidomain=maidomain.substring(tempint+1,maidomain.length-tempint-1);
}

tempint=maidomain.indexof(":");
if(tempint!=-1)
{
mailserver=maidomain.substring(0,tempint);
mailserverport=system.convert.toint32(maidomain.substring(tempint+1,maidomain.length-tempint-1));
}
else
{
mailserver=maidomain;

}


}

}
}



/// <summary>
/// 郵件服務器端口號
/// </summary>
public int maildomainport
{
set
{
mailserverport=value;
}
}



/// <summary>
/// smtp認證時使用的用戶名
/// </summary>
public string mailserverusername
{
set
{
if(value.trim()!="")
{
username=value.trim();
esmtp=true;
}
else
{
username="";
esmtp=false;
}
}
}

/// <summary>
/// smtp認證時使用的密碼
/// </summary>
public string mailserverpassword
{
set
{
password=value;
}
}

/// <summary>
/// 郵件發送優先級,可設置為"high","normal","low"或"1","3","5"
/// </summary>
public string priority
{
set
{
switch(value.tolower())
{
case "high":
priority="high";
break;

case "1":
priority="high";
break;

case "normal":
priority="normal";
break;

case "3":
priority="normal";
break;

case "low":
priority="low";
break;

case "5":
priority="low";
break;

default:
priority="normal";
break;
}
}
}


/// <summary>
/// 錯誤消息反饋
/// </summary>
public string errormessage
{
get
{
return errmsg;
}
}



/// <summary>
/// 服務器交互記錄
/// </summary>
private string logs="";

/// <summary>
/// 服務器交互記錄,如發現本組件不能使用的smtp服務器,請將出錯時的logs發給我([email protected]),我將盡快查明原因。
/// </summary>
public string logs
{
get
{
return logs;
}
}




/// <summary>
/// smtp回應代碼哈希表
/// </summary>
private void smtpcodeadd()
{
errcodeht.add("500","郵箱地址錯誤");
errcodeht.add("501","參數格式錯誤");
errcodeht.add("502","命令不可實現");
errcodeht.add("503","服務器需要smtp驗證");
errcodeht.add("504","命令參數不可實現");
errcodeht.add("421","服務未就緒,關閉傳輸信道");
errcodeht.add("450","要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)");
errcodeht.add("550","要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)");
errcodeht.add("451","放棄要求的操作;處理過程中出錯");
errcodeht.add("551","用戶非本地,請嘗試<forward-path>");
errcodeht.add("452","系統存儲不足,要求的操作未執行");
errcodeht.add("552","過量的存儲分配,要求的操作未執行");
errcodeht.add("553","郵箱名不可用,要求的操作未執行(例如郵箱格式錯誤)");
errcodeht.add("432","需要一個密碼轉換");
errcodeht.add("534","認證機制過于簡單");
errcodeht.add("538","當前請求的認證機制需要加密");
errcodeht.add("454","臨時認證失敗");
errcodeht.add("530","需要認證");

rightcodeht.add("220","服務就緒");
rightcodeht.add("250","要求的郵件操作完成");
rightcodeht.add("251","用戶非本地,將轉發向<forward-path>");
rightcodeht.add("354","開始郵件輸入,以<enter>.<enter>結束");
rightcodeht.add("221","服務關閉傳輸信道");
rightcodeht.add("334","服務器響應驗證base64字符串");
rightcodeht.add("235","驗證成功");
}


/// <summary>
/// 將字符串編碼為base64字符串
/// </summary>
/// <param name="estr">要編碼的字符串</param>
private string base64encode(string str)
{
byte[] barray;
barray=encoding.default.getbytes(str);
return convert.tobase64string(barray);
}


/// <summary>
/// 將base64字符串解碼為普通字符串
/// </summary>
/// <param name="dstr">要解碼的字符串</param>
private string base64decode(string str)
{
byte[] barray;
barray=convert.frombase64string(str);
return encoding.default.getstring(barray);
}


/// <summary>
/// 得到上傳附件的文件流
/// </summary>
/// <param name="filepath">附件的絕對路徑</param>
private string getstream(string filepath)
{
//建立文件流對象
system.io.filestream filestr=new system.io.filestream(filepath,system.io.filemode.open);
byte[] by=new byte[system.convert.toint32(filestr.length)];
filestr.read(by,0,by.length);
filestr.close();
return(system.convert.tobase64string(by));
}


/// <summary>
/// 添加郵件附件
/// </summary>
/// <param name="path">附件絕對路徑</param>
public void addattachment(string path)
{
attachments.add(path);
}



/// <summary>
/// 添加一個收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool addrecipient(string str)
{
str=str.trim();
if(str==null||str==""||str.indexof("@")==-1)
return true;
if(recipientnum<recipientmaxnum)
{
recipient.add(recipientnum,str);
recipientnum++;
return true;
}
else
{
errmsg+="收件人過多";
return false;
}
}


/// <summary>
/// 最多收件人數量
/// </summary>
public int recipientmaxnum
{
set
{
recipientmaxnum = value;
}
}


/// <summary>
/// 添加一組收件人(不超過recipientmaxnum個),參數為字符串數組
/// </summary>
/// <param name="str">保存有收件人地址的字符串數組(不超過recipientmaxnum個)</param>
public bool addrecipient(string[] str)
{
for(int i=0;i<str.length;i++)
{
if(!addrecipient(str[i]))
{
return false;
}
}
return true;
}

/// <summary>
/// 發送smtp命令
/// </summary>
private bool sendcommand(string str)
{
byte[] writebuffer;
if(str==null||str.trim()=="")
{
return true;
}
logs+=str;
writebuffer = encoding.default.getbytes(str);
try
{
ns.write(writebuffer,0,writebuffer.length);
}
catch
{
errmsg="網絡連接錯誤";
return false;
}
return true;
}

/// <summary>
/// 接收smtp服務器回應
/// </summary>
private string recvresponse()
{
int streamsize;
string returnvalue = "";
byte[] readbuffer = new byte[1024] ;
try
{
streamsize=ns.read(readbuffer,0,readbuffer.length);
}
catch
{
errmsg="網絡連接錯誤";
return "false";
}

if (streamsize==0)
{
return returnvalue ;
}
else
{
returnvalue = encoding.default.getstring(readbuffer).substring(0,streamsize);
logs+=returnvalue;
return returnvalue;
}
}


/// <summary>
/// 與服務器交互,發送一條命令并接收回應。
/// </summary>
/// <param name="command">一個要發送的命令</param>
/// <param name="errstr">如果錯誤,要反饋的信息</param>
private bool dialog(string str,string errstr)
{
if(str==null||str.trim()=="")
{
return true;
}
if(sendcommand(str))
{
string rr=recvresponse();
if(rr=="false")
{
return false;
}
string rrcode=rr.substring(0,3);
if(rightcodeht[rrcode]!=null)
{
return true;
}
else
{
if(errcodeht[rrcode]!=null)
{
errmsg+=(rrcode+errcodeht[rrcode].tostring());
errmsg+=enter;
}
else
{
errmsg+=rr;
}
errmsg+=errstr;
return false;
}
}
else
{
return false;
}

}


/// <summary>
/// 與服務器交互,發送一組命令并接收回應。
/// </summary>

private bool dialog(string[] str,string errstr)
{
for(int i=0;i<str.length;i++)
{
if(!dialog(str[i],""))
{
errmsg+=enter;
errmsg+=errstr;
return false;
}
}

return true;
}



private bool sendemail()
{
//連接網絡
try
{
tc=new tcpclient(mailserver,mailserverport);
}
catch(exception e)
{
errmsg=e.tostring();
return false;
}

ns = tc.getstream();
smtpcodeadd();

//驗證網絡連接是否正確
if(rightcodeht[recvresponse().substring(0,3)]==null)
{
errmsg="網絡連接失敗";
return false;
}


string[] sendbuffer;
string sendbufferstr;

//進行smtp驗證
if(esmtp)
{
sendbuffer=new string[4];
sendbuffer[0]="ehlo " + mailserver + enter;
sendbuffer[1]="auth login" + enter;
sendbuffer[2]=base64encode(username) + enter;
sendbuffer[3]=base64encode(password) + enter;
if(!dialog(sendbuffer,"smtp服務器驗證失敗,請核對用戶名和密碼。"))
return false;
}
else
{
sendbufferstr="helo " + mailserver + enter;
if(!dialog(sendbufferstr,""))
return false;
}

//
sendbufferstr="mail from:<" + from + ">" + enter;
if(!dialog(sendbufferstr,"發件人地址錯誤,或不能為空"))
return false;

//
sendbuffer=new string[recipientmaxnum];
for(int i=0;i<recipient.count;i++)
{

sendbuffer[i]="rcpt to:<" + recipient[i].tostring() +">" + enter;

}
if(!dialog(sendbuffer,"收件人地址有誤"))
return false;

sendbufferstr="data" + enter;
if(!dialog(sendbufferstr,""))
return false;

sendbufferstr="from:" + fromname + "<" + from +">" +enter;

sendbufferstr += "to:=?"+charset.toupper()+"?b?"+base64encode(recipientname)+"?="+"<"+recipient[0]+">"+enter;
sendbufferstr+="cc:";
for(int i=0;i<recipient.count;i++)
{
sendbufferstr+=recipient[i].tostring() + "<" + recipient[i].tostring() +">,";
}
sendbufferstr+=enter;


if(charset=="")
{
sendbufferstr+="subject:" + subject + enter;
}
else
{
sendbufferstr+="subject:" + "=?" + charset.toupper() + "?b?" + base64encode(subject) +"?=" +enter;
}

sendbufferstr+="x-priority:" + priority + enter;
sendbufferstr+="x-msmail-priority:" + priority + enter;
sendbufferstr+="importance:" + priority + enter;
sendbufferstr+="x-mailer: huolx.pubclass" + enter;
sendbufferstr+="mime-version: 1.0" + enter;

sendbufferstr += "content-type: multipart/mixed;"+enter;//內容格式和分隔符
sendbufferstr += " boundary=/"----=_nextpart_000_00d6_01c29593.aab31770/""+enter;
sendbufferstr += "------=_nextpart_000_00d6_01c29593.aab31770"+enter;

if(html)
{
sendbufferstr+="content-type: text/html;" + enter;
}
else
{
sendbufferstr+="content-type: text/plain;" + enter;
}

if(charset=="")
{
sendbufferstr+=" charset=/"iso-8859-1/"" + enter;
}
else
{
sendbufferstr+=" charset=/"" + charset.tolower() + "/"" + enter;
}
//sendbufferstr += "content-transfer-encoding: base64"+enter;

sendbufferstr+="content-transfer-encoding: base64" + enter + enter;

sendbufferstr+= base64encode(body) + enter;
if(attachments.count!=0)
{
foreach(string filepath in attachments)
{

sendbufferstr += "------=_nextpart_000_00d6_01c29593.aab31770"+enter;
sendbufferstr += "content-type: application/octet-stream"+enter;
sendbufferstr += " name=/"=?"+charset.toupper()+"?b?"+base64encode(filepath.substring(filepath.lastindexof("//")+1))+"?=/""+enter;
sendbufferstr += "content-transfer-encoding: base64"+enter;
sendbufferstr += "content-disposition: attachment;"+enter;
sendbufferstr += " filename=/"=?"+charset.toupper()+"?b?"+base64encode(filepath.substring(filepath.lastindexof("//")+1))+"?=/""+enter+enter;
sendbufferstr += getstream(filepath)+enter+enter;
}
}
sendbufferstr += "------=_nextpart_000_00d6_01c29593.aab31770--"+enter+enter;


sendbufferstr += enter + "." + enter;

if(!dialog(sendbufferstr,"錯誤信件信息"))
return false;


sendbufferstr="quit" + enter;
if(!dialog(sendbufferstr,"斷開連接時錯誤"))
return false;


ns.close();
tc.close();
return true;
}


/// <summary>
/// 發送郵件方法,所有參數均通過屬性設置。
/// </summary>
public bool send()
{
if(recipient.count==0)
{
errmsg="收件人列表不能為空";
return false;
}

if(mailserver.trim()=="")
{
errmsg="必須指定smtp服務器";
return false;
}

return sendemail();

}


/// <summary>
/// 發送郵件方法
/// </summary>
/// <param name="smtpserver">smtp服務器信息,如"username:[email protected]:25",也可去掉部分次要信息,如"www.smtpserver.com"</param>
public bool send(string smtpserver)
{

maildomain=smtpserver;
return send();
}


/// <summary>
/// 發送郵件方法
/// </summary>
/// <param name="smtpserver">smtp服務器信息,如"username:[email protected]:25",也可去掉部分次要信息,如"www.smtpserver.com"</param>
/// <param name="from">發件人mail地址</param>
/// <param name="fromname">發件人姓名</param>
/// <param name="to">收件人地址</param>
/// <param name="toname">收件人姓名</param>
/// <param name="html">是否html郵件</param>
/// <param name="subject">郵件主題</param>
/// <param name="body">郵件正文</param>
public bool send(string smtpserver,string from,string fromname,string to,string toname,bool html,string subject,string body)
{
maildomain=smtpserver;
from=from;
fromname=fromname;
addrecipient(to);
recipientname=toname;
html=html;
subject=subject;
body=body;
return send();
}


}
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漯河市| 稷山县| 石景山区| 金塔县| 隆回县| 连云港市| 夹江县| 九龙城区| 金溪县| 威信县| 玉溪市| 将乐县| 门头沟区| 清镇市| 舒城县| 延寿县| 岳阳市| 双城市| 鄄城县| 正蓝旗| 江孜县| 南木林县| 泾源县| 墨脱县| 房产| 长泰县| 娄烦县| 永善县| 含山县| 铁岭县| 宁明县| 大理市| 咸宁市| 杭州市| 化德县| 冷水江市| 江城| 浙江省| 临朐县| 肇州县| 郧西县|