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

首頁 > 開發 > 綜合 > 正文

EMAIL發送系統(C#+基于SMTP認證) 2.0

2024-07-21 02:24:49
字體:
來源:轉載
供稿:網友
這個是對于
email發送系統(c#+基于smtp認證) 1.0

的改版這個第一版是2002年11月寫的,過了一年半了,才有人提意見,就修正了一下,因為后來做的項目一直用不上,也就沒有注意到

前段時間有網友反饋了一些問題,這次主要做了一些修正

1,text模式下發往163的郵件內容不見了
2,如果用outlook接收而不是在網上看郵件的話,會發現正文內容,但其后跟著一些亂碼.
3,一些新開通的郵箱收到的是亂碼,如*@126.com
4,修正了帶附件的郵件,打開附件時內容混亂的問題


感謝 lion互動網絡論壇 的smhy8187和郵箱是[email protected]的朋友提供意見

歡迎大家提出修改建議,[注:]最好能把修改稿mail給我一份,我們共同學習
我的email:[email protected] [email protected]


------------------------------------------

源碼下載:點擊下載

以下是程序源碼:



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

namespace lion.web.mail
{
/*
create by lion
2004-04-23 19:00
copyright (c) 2001,2002 www.lionsky.net. all rights reserved.
web: http://www.lionsky.net ;;
email: [email protected]
support .net framework beta 2
*/
#region aspnetpager server control

/// <summary>
/// 郵件可以通過 microsoft windows 2000 中內置的 smtp 郵件服務或任意 smtp 服務器來傳送
/// </summary>
public class smtpmail
{

private string enter="/r/n";

/// <summary>
/// 設定語言代碼,默認設定為gb2312,如不需要可設置為""
/// </summary>
private string _charset="gb2312";

/// <summary>
/// 發件人地址
/// </summary>
private string _from="";

/// <summary>
/// 發件人姓名
/// </summary>
private string _fromname="";

/// <summary>
/// 回復郵件地址
/// </summary>
///public string replyto="";

/// <summary>
/// 收件人姓名
/// </summary>
private 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>
private bool _html=false;


/// <summary>
/// 郵件附件列表
/// </summary>
private ilist attachments;

/// <summary>
/// 郵件發送優先級,可設置為"high","normal","low"或"1","3","5"
/// </summary>
private string priority="normal";

/// <summary>
/// 郵件主題
/// </summary>
private string _subject;

/// <summary>
/// 郵件正文
/// </summary>
private string _body;

/// <summary>
/// 密送收件人列表
/// </summary>
///private hashtable recipientbcc=new hashtable();

/// <summary>
/// 收件人數量
/// </summary>
private int recipientnum=0;

/// <summary>
/// 最多收件人數量
/// </summary>
private int recipientmaxnum=5;

/// <summary>
/// 密件收件人數量
/// </summary>
///private int recipientbccnum=0;

/// <summary>
/// 錯誤消息反饋
/// </summary>
private string errmsg;

/// <summary>
/// tcpclient對象,用于連接服務器
/// </summary>
private tcpclient tc;

/// <summary>
/// networkstream對象
/// </summary>
private networkstream ns;

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

/// <summary>
/// smtp錯誤代碼哈希表
/// </summary>
private hashtable errcodeht = new hashtable();

/// <summary>
/// smtp正確代碼哈希表
/// </summary>
private hashtable rightcodeht = new hashtable();


/// <summary>
/// 初始化 <see cref="lion.web.mail.smtpmail"/> 類的新實例
/// </summary>
public smtpmail()
{
attachments = new system.collections.arraylist();
}

#region properties


/// <summary>
/// 郵件主題
/// </summary>
public string subject
{
get
{
return this._subject;
}
set
{
this._subject = value;
}
}

/// <summary>
/// 郵件正文
/// </summary>
public string body
{
get
{
return this._body;
}
set
{
this._body = value;
}
}


/// <summary>
/// 發件人地址
/// </summary>
public string from
{
get
{
return _from;
}
set
{
this._from = value;
}
}

/// <summary>
/// 設定語言代碼,默認設定為gb2312,如不需要可設置為""
/// </summary>
public string charset
{
get
{
return this._charset;
}
set
{
this._charset = value;
}
}

/// <summary>
/// 發件人姓名
/// </summary>
public string fromname
{
get
{
return this._fromname;
}
set
{
this._fromname = value;
}
}

/// <summary>
/// 收件人姓名
/// </summary>
public string recipientname
{
get
{
return this._recipientname;
}
set
{
this._recipientname = value;
}
}

/// <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>
/// 是否html郵件
/// </summary>
public bool html
{
get
{
return this._html;
}
set
{
this._html = value;
}
}


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

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

原因。
/// </summary>
public string logs
{
get
{
return logs;
}
}

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


#endregion

#region methods


/// <summary>
/// 添加郵件附件
/// </summary>
/// <param name="filepath">附件絕對路徑</param>
public void addattachment(params string[] filepath)
{
if(filepath==null)
{
throw(new argumentnullexception("filepath"));
}
for(int i=0;i<filepath.length;i++)
{
attachments.add(filepath[i]);
}
}

/// <summary>
/// 添加一組收件人(不超過recipientmaxnum個),參數為字符串數組
/// </summary>
/// <param name="recipients">保存有收件人地址的字符串數組(不超過recipientmaxnum個)</param>
public bool addrecipient(params string[] recipients)
{
if(recipient==null)
{
dispose();
throw(new argumentnullexception("recipients"));
}
for(int i=0;i<recipients.length;i++)
{
string recipient = recipients[i].trim();
if(recipient==string.empty)
{
dispose();
throw(new argumentnullexception("recipients["+ i +"]"));
}
if(recipient.indexof("@")==-1)
{
dispose();
throw(new argumentexception("recipients.indexof(/"@/")==-1","recipients"));
}
if(!addrecipient(recipient))
{
return false;
}
}
return true;
}

/// <summary>
/// 發送郵件方法,所有參數均通過屬性設置。
/// </summary>
public bool send()
{
if(mailserver.trim()=="")
{
throw(new argumentnullexception("recipient","必須指定smtp服務器"));
}

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();
}


#endregion

#region private helper functions

/// <summary>
/// 添加一個收件人
/// </summary>
/// <param name="recipients">收件人地址</param>
private bool addrecipient(string recipients)
{
if(recipientnum<recipientmaxnum)
{
recipient.add(recipientnum,recipients);
recipientnum++;
return true;
}
else
{
dispose();
throw(new argumentoutofrangeexception("recipients","收件人過多不可多于 "+ recipientmaxnum +"

個"));
}
}

void dispose()
{
if(ns!=null)ns.close();
if(tc!=null)tc.close();
}

/// <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="str">要編碼的字符串</param>
private string base64encode(string str)
{
byte[] barray;
barray=encoding.default.getbytes(str);
return convert.tobase64string(barray);
}


/// <summary>
/// 將base64字符串解碼為普通字符串
/// </summary>
/// <param name="str">要解碼的字符串</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>
/// 發送smtp命令
/// </summary>
private bool sendcommand(string str)
{
byte[] writebuffer;
if(str==null||str.trim()==string.empty)
{
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 = string.empty;
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+this.enter;
return returnvalue;
}
}

/// <summary>
/// 與服務器交互,發送一條命令并接收回應。
/// </summary>
/// <param name="str">一個要發送的命令</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;
}

/// <summary>
/// sendemail
/// </summary>
/// <returns></returns>
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;

/*
sendbuffer=new string[10];
for(int i=0;i<recipientbcc.count;i++)
{

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

}

if(!dialog(sendbuffer,"密件收件人地址有誤"))
return false;
*/
sendbufferstr="data" + enter;
if(!dialog(sendbufferstr,""))
return false;

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

//if(replyto.trim()!="")
//{
// sendbufferstr+="reply-to: " + replyto + enter;
//}

//sendbufferstr+="to:" + recipientname + "<" + recipient[0] +">" +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;

sendbufferstr+=((subject==string.empty || subject==null)?"subject:":((charset=="")?("subject:" +

subject):("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: lion.web.mail.smtpmail pubclass [cn]" + enter;
sendbufferstr+="mime-version: 1.0" + enter;
if(attachments.count!=0)
{
sendbufferstr+="content-type: multipart/mixed;" + enter;
sendbufferstr += " boundary=/"====="+

(html?"001_dragon520636771063_":"001_dragon303406132050_")+"=====/""+enter+enter;
}

if(html)
{
if(attachments.count==0)
{
sendbufferstr += "content-type: multipart/alternative;"+enter;//內容格式和分隔符
sendbufferstr += " boundary=/"=====003_dragon520636771063_=====/""+enter+enter;

sendbufferstr += "this is a multi-part message in mime format."+enter+enter;
}
else
{
sendbufferstr +="this is a multi-part message in mime format."+enter+enter;
sendbufferstr += "--=====001_dragon520636771063_====="+enter;
sendbufferstr += "content-type: multipart/alternative;"+enter;//內容格式和分隔符
sendbufferstr += " boundary=/"=====003_dragon520636771063_=====/""+enter+enter;


}
sendbufferstr += "--=====003_dragon520636771063_====="+enter;
sendbufferstr += "content-type: text/plain;"+ enter;
sendbufferstr += ((charset=="")?(" charset=/"iso-8859-1/""):(" charset=/"" +

charset.tolower() + "/"")) + enter;
sendbufferstr+="content-transfer-encoding: base64" + enter + enter;
sendbufferstr+= base64encode("郵件內容為html格式,請選擇html方式查看") + enter + enter;

sendbufferstr += "--=====003_dragon520636771063_====="+enter;



sendbufferstr+="content-type: text/html;" + enter;
sendbufferstr+=((charset=="")?(" charset=/"iso-8859-1/""):(" charset=/"" +

charset.tolower() + "/"")) + enter;
sendbufferstr+="content-transfer-encoding: base64" + enter + enter;
sendbufferstr+= base64encode(body) + enter + enter;
sendbufferstr += "--=====003_dragon520636771063_=====--"+enter;
}
else
{
if(attachments.count!=0)
{
sendbufferstr += "--=====001_dragon303406132050_====="+enter;
}
sendbufferstr+="content-type: text/plain;" + enter;
sendbufferstr+=((charset=="")?(" charset=/"iso-8859-1/""):(" charset=/"" +

charset.tolower() + "/"")) + enter;
sendbufferstr+="content-transfer-encoding: base64" + enter + enter;
sendbufferstr+= base64encode(body) + enter;
}

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




if(attachments.count!=0)
{
for(int i=0;i<attachments.count;i++)
{
string filepath = (string)attachments[i];
sendbufferstr += "--====="+

(html?"001_dragon520636771063_":"001_dragon303406132050_") +"====="+enter;
//sendbufferstr += "content-type: application/octet-stream"+enter;
sendbufferstr += "content-type: text/plain;"+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 += "--====="+ (html?"001_dragon520636771063_":"001_dragon303406132050_")

+"=====--"+enter+enter;
}



sendbufferstr += enter + "." + enter;

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


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


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


#endregion

#region
/*
/// <summary>
/// 添加一個密件收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool addrecipientbcc(string str)
{
if(str==null||str.trim()=="")
return true;
if(recipientbccnum<10)
{
recipientbcc.add(recipientbccnum,str);
recipientbccnum++;
return true;
}
else
{
errmsg+="收件人過多";
return false;
}
}


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

*/
#endregion
}

#endregion
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耒阳市| 马鞍山市| 三河市| 昂仁县| 潜江市| 淅川县| 定兴县| 古浪县| 阿城市| 九寨沟县| 东港市| 民权县| 九寨沟县| 海淀区| 松江区| 称多县| 忻城县| 宜宾市| 汉川市| 林甸县| 武城县| 靖宇县| 二连浩特市| 洛川县| 嘉峪关市| 新干县| 芮城县| 兰考县| 鄂州市| 周宁县| 石狮市| 山阴县| 柳江县| 丰县| 扶余县| 高青县| 汾西县| 当雄县| 武乡县| 鹤壁市| 句容市|