///
/// 接收SMTP服务器回应
///
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;
}
}
///
/// 与服务器交互,发送一条命令并接收回应。
///
/// 一个要发送的命令
/// 如果错误,要反馈的信息
private bool Dialog(string Command,string errstr)
{
if(Command==null||Command.Trim()=="")
{
return true;
}
if(SendCommand(Command))
{
string RR=RecvResponse();
if(RR=="false")
{
return false;
}
string RRCode=RR.Substring(0,3);
if(RightCodeHT[RRCode]!=null)
{
return true;
}
else
{
errmsg+=(RRCode+ErrCodeHT[RRCode].ToString());
errmsg+=enter;
errmsg+=errstr;
return false;
}
}
else
{
return false;
}
}
///
/// 与服务器交互,发送一组命令并接收回应。
///
private bool Dialog(string[] Command,string errstr)
{
for(int i=0;i { if(!Dialog(Command[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[10]; for(int i=0;i { SendBuffer[i]="RCPT TO:<" + Recipient[i].ToString() +">" + enter; } if(!Dialog(SendBuffer,"收件人地址有误")) return false; SendBuffer=new string[10]; for(int i=0;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; SendBufferstr+="To:" + RecipientName + "<" + Recipient[0] +">" +enter; SendBufferstr+="CC:"; for(int i=1;i { SendBufferstr+=Recipient[i].ToString() + "<" + Recipient[i].ToString() +">,"; } SendBufferstr+=enter; if(ReplyTo.Trim()!="") { SendBufferstr+="Reply-To: " + ReplyTo + enter; } if(Charset=="") { SendBufferstr+="Subject:" + Subject + enter; } else { SendBufferstr+="Subject:" + "=?" + Charset.ToUpper() + "?B?" + Base64Encode(Subject) +"?=" +enter; } SendBufferstr+="MIME-Version: 1.0" + 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+="X-Priority:" + priority + enter; SendBufferstr+="X-MSMail-Priority:" + priority + enter; SendBufferstr+="Importance:" + priority + enter; SendBufferstr+="X-Mailer: Huolx.Pubclass" + enter; SendBufferstr+= enter + enter; SendBufferstr+= Base64Encode(Body) + enter; SendBufferstr+=enter + "." + enter; if(!Dialog(SendBufferstr,"错误信件信息")) return false; SendBufferstr="QUIT" + enter; if(!Dialog(SendBufferstr,"断开连接时错误")) return false; ns.Close(); tc.Close(); return true; } /// /// 发送邮件方法,所有参数均通过属性设置。 /// public bool Send() { if(Recipient.Count==0) { errmsg="收件人列表不能为空"; return false; } if(RecipientName=="") RecipientName=Recipient[0].ToString(); if(mailserver.Trim()=="") { errmsg="必须指定SMTP服务器"; return false; } return SendEmail(); } /// /// 发送邮件方法 /// /// smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信息,如"www.smtpserver.com" public bool Send(string smtpserver) { MailDomain=smtpserver; return Send(); } /// /// 发送邮件方法 /// /// smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信息,如"www.smtpserver.com" /// 发件人mail地址 /// 发件人姓名 /// 回复邮件地址 /// 收件人地址 /// 收件人姓名 /// 是否HTML邮件 /// 邮件主题 /// 邮件正文 public bool Send(string smtpserver,string from,string fromname,string replyto,string to,string toname,bool html,string subject,string body) { MailDomain=smtpserver; From=from; FromName=fromname; ReplyTo=replyto; AddRecipient(to); RecipientName=toname; Html=html; Subject=subject; Body=body; return Send(); } } }

