?? smtpmail.cs
字號:
}
/// <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, 0, ReadBuffer.Length).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;
SendBuffer = new string[1];
if (cc != "")
SendBuffer[0] = "RCPT TO:<" + cc.ToString() + ">" + enter;
if (!Dialog(SendBuffer, "抄送人地址有誤"))
return true;
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 += cc.ToString() + "<" + cc.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;
if (Attachments.Count == 0)
{
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 + enter;
}else
{
SendBufferstr += "Content-Type:multipart/mixed;" + enter;
SendBufferstr += " boundary=\"=====001_Dragon320037612222_=====\""+enter;
SendBufferstr += "This is a multi-part message in MIME format."+enter+enter;
SendBufferstr += "--=====001_Dragon320037612222_====="+enter;
SendBufferstr += "Content-Type:text/plain;" + enter;
SendBufferstr += " charset=\"" + Charset.ToLower() + "\"" + enter;
SendBufferstr += "Content-Transfer-Encoding:base64"+enter+enter;
SendBufferstr += Base64Encode(Body) + enter + enter;
foreach (string filepath in Attachments)
{
SendBufferstr += "--=====001_Dragon320037612222_=====" + 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 +="--=====001_Dragon320037612222_=====--" + 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:passwordwww.smtpserver.com:25",也可去掉部分次要信息,如www.smtpserver.com"</param>
public bool Send(string smtpserver)
{
MailDomain = smtpserver;
return Send();
}
public string Cc
{
set { cc=value ;}
}
/// <summary>
/// 發送郵件方法
/// </summary>
/// <param name="smtpserver">smtp服務器信息,如"username:passwordwww.smtpserver.com: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 from, string fromname, string to, string toname,string txtCc, bool html, string subject, string body,string attfile)
{
//MailServerUserName = smtpuser;
//MailServerPassWord = smtppass;
From = from;
FromName = fromname;
AddRecipient(to);
RecipientName = toname;
cc = txtCc;
if (attfile !="")
AddAttachment(attfile);
Html = html;
Subject = subject;
Body = body;
return Send();
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -