private bool SendEmail(string smtpServer, int port, bool ESmtp, string username, string password, MailMessage mailMessage) { if (Connect(smtpServer, port) == false)//测试连接服务器是否成功 return false; string priority = GetPriorityString(mailMessage.Priority); bool Html = (mailMessage.BodyFormat == MailFormat.HTML); string[] SendBuffer; string SendBufferstr; //进行SMTP验证,现在大部分SMTP服务器都要认证 if (ESmtp) { SendBuffer = new String[4]; SendBuffer[0] = "EHLO " + smtpServer + CRLF; SendBuffer[1] = "AUTH LOGIN" + CRLF; SendBuffer[2] = Base64Encode(username) + CRLF; SendBuffer[3] = Base64Encode(password) + CRLF; if (!Dialog(SendBuffer, "SMTP服务器验证失败,请核对用户名和密码。")) return false; } else {//不需要身份认证 SendBufferstr = "HELO " + smtpServer + CRLF; if (!Dialog(SendBufferstr, "")) return false; } //发件人地址 //SendBufferstr = "MAIL FROM:<" + mailMessage.From + ">" + CRLF; SendBufferstr = "MAIL FROM:<" + username + ">" + CRLF; if (!Dialog(SendBufferstr, "发件人地址错误,或不能为空")) return false; //收件人地址 SendBuffer = new string[mailMessage.Recipients.Count]; for (int i = 0; i < mailMessage.Recipients.Count; i++) { SendBuffer[i] = "RCPT TO:<" + (string)mailMessage.Recipients[i] + ">" + CRLF; } if (!Dialog(SendBuffer, "收件人地址有误")) return false; SendBufferstr = "DATA" + CRLF; if (!Dialog(SendBufferstr, "")) return false; //发件人姓名 SendBufferstr = "From:" + mailMessage.FromName + "<" + mailMessage.From + ">" + CRLF; if (mailMessage.Recipients.Count == 0) { return false; } else { SendBufferstr += "To:=?" + mailMessage.Charset.ToUpper() + "?B?" + Base64Encode((string)mailMessage.Recipients[0]) + "?=" + "<" + (string)mailMessage.Recipients[0] + ">" + CRLF; } SendBufferstr += ((mailMessage.Subject == String.Empty || mailMessage.Subject == null) ? "Subject:" : ((mailMessage.Charset == "") ? ("Subject:" + mailMessage.Subject) : ("Subject:" + "=?" + mailMessage.Charset.ToUpper() + "?B?" + Base64Encode(mailMessage.Subject) + "?="))) + CRLF; SendBufferstr += "X-Priority:" + priority + CRLF; SendBufferstr += "X-MSMail-Priority:" + priority + CRLF; SendBufferstr += "Importance:" + priority + CRLF; SendBufferstr += "X-Mailer: Lion.Web.Mail.SmtpMail Pubclass [cn]" + CRLF; SendBufferstr += "MIME-Version: 1.0" + CRLF; if (mailMessage.Attachments.Count != 0) { SendBufferstr += "Content-Type: multipart/mixed;" + CRLF; SendBufferstr += " boundary=\"=====" + (Html ? "001_Dragon520636771063_" : "001_Dragon303406132050_") + "=====\"" + CRLF + CRLF; } if (Html) { if (mailMessage.Attachments.Count == 0) { SendBufferstr += "Content-Type: multipart/alternative;" + CRLF;//内容格式和分隔符 SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\"" + CRLF + CRLF; SendBufferstr += "This is a multi-part message in MIME format." + CRLF + CRLF; } else { SendBufferstr += "This is a multi-part message in MIME format." + CRLF + CRLF; SendBufferstr += "--=====001_Dragon520636771063_=====" + CRLF; SendBufferstr += "Content-Type: multipart/alternative;" + CRLF;//内容格式和分隔符 SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\"" + CRLF + CRLF; } SendBufferstr += "--=====003_Dragon520636771063_=====" + CRLF; SendBufferstr += "Content-Type: text/plain;" + CRLF; SendBufferstr += ((mailMessage.Charset == "") ? (" charset=\"iso-8859-1\"") : (" charset=\"" + mailMessage.Charset.ToLower() + "\"")) + CRLF; SendBufferstr += "Content-Transfer-Encoding: base64" + CRLF + CRLF; SendBufferstr += Base64Encode("邮件内容为HTML格式,请选择HTML方式查看") + CRLF + CRLF; SendBufferstr += "--=====003_Dragon520636771063_=====" + CRLF; SendBufferstr += "Content-Type: text/html;" + CRLF; SendBufferstr += ((mailMessage.Charset == "") ? (" charset=\"iso-8859-1\"") : (" charset=\"" + mailMessage.Charset.ToLower() + "\"")) + CRLF; SendBufferstr += "Content-Transfer-Encoding: base64" + CRLF + CRLF; SendBufferstr += Base64Encode(mailMessage.Body) + CRLF + CRLF; SendBufferstr += "--=====003_Dragon520636771063_=====--" + CRLF; } else { if (mailMessage.Attachments.Count != 0) { SendBufferstr += "--=====001_Dragon303406132050_=====" + CRLF; } SendBufferstr += "Content-Type: text/plain;" + CRLF; SendBufferstr += ((mailMessage.Charset == "") ? (" charset=\"iso-8859-1\"") : (" charset=\"" + mailMessage.Charset.ToLower() + "\"")) + CRLF; SendBufferstr += "Content-Transfer-Encoding: base64" + CRLF + CRLF; SendBufferstr += Base64Encode(mailMessage.Body) + CRLF; } if (mailMessage.Attachments.Count != 0) { for (int i = 0; i < mailMessage.Attachments.Count; i++) { string filepath = (string)mailMessage.Attachments[i]; SendBufferstr += "--=====" + (Html ? "001_Dragon520636771063_" : "001_Dragon303406132050_") + "=====" + CRLF; //SendBufferstr += "Content-Type: application/octet-stream"+CRLF; SendBufferstr += "Content-Type: text/plain;" + CRLF; SendBufferstr += " name=\"=?" + mailMessage.Charset.ToUpper() + "?B?" + Base64Encode(filepath.Substring(filepath.LastIndexOf("\\") + 1)) + "?=\"" + CRLF; SendBufferstr += "Content-Transfer-Encoding: base64" + CRLF; SendBufferstr += "Content-Disposition: attachment;" + CRLF; SendBufferstr += " filename=\"=?" + mailMessage.Charset.ToUpper() + "?B?" + Base64Encode(filepath.Substring(filepath.LastIndexOf("\\") + 1)) + "?=\"" + CRLF + CRLF; SendBufferstr += GetStream(filepath) + CRLF + CRLF; } SendBufferstr += "--=====" + (Html ? "001_Dragon520636771063_" : "001_Dragon303406132050_") + "=====--" + CRLF + CRLF; } SendBufferstr += CRLF + "." + CRLF;//内容结束 if (!Dialog(SendBufferstr, "错误信件信息")) return false; SendBufferstr = "QUIT" + CRLF; if (!Dialog(SendBufferstr, "断开连接时错误")) return false; networkStream.Close(); tcpClient.Close(); return true; }
/// <summary> /// 发送电子邮件,SMTP服务器不需要身份验证 /// </summary> /// <param name="smtpServer">发信SMTP服务器</param> /// <param name="port">端口,默认为25</param> /// <param name="mailMessage">邮件内容</param> /// <returns></returns> public bool SendEmail(string smtpServer, int port, MailMessage mailMessage) { return SendEmail(smtpServer, port, false, "", "", mailMessage); }
/// <summary> /// 发送电子邮件,SMTP服务器需要身份验证 /// </summary> /// <param name="smtpServer">发信SMTP服务器</param> /// <param name="port">端口,默认为25</param> /// <param name="username">发信人邮箱地址</param> /// <param name="password">发信人邮箱密码</param> /// <param name="mailMessage">邮件内容</param> /// <returns></returns> public bool SendEmail(string smtpServer, int port, string username, string password, MailMessage mailMessage) { return SendEmail(smtpServer, port, true, username, password, mailMessage); }
public bool Send(MailMessage mailMessage, string username, string password) { SmtpServerHelper helper = new SmtpServerHelper(); if (helper.SendEmail(_SmtpServer, _SmtpPort, username, password, mailMessage)) return true; else { errmsg = helper.ErrMsg; return false; } }