/// <summary> /// 电子邮件[E-Mail]发送事件 /// </summary> /// <param name="mailMessage">电子邮件[E-Mail]正文信息</param> /// <returns>邮件发送结果</returns> public bool Send(EMailMessage mailMessage) { if (string.IsNullOrEmpty(SMTPServer) || SMTPPort <= 0 || string.IsNullOrEmpty(SMTPUserName) || string.IsNullOrEmpty(SMTPPassword)) { ErrorMessage = "邮件服务器地址、端口号、用户名、密码有空值或填写不正确。"; return(false); } bool result = FEMailHelper.SendEmail(SMTPServer, SMTPPort, SMTPUserName, SMTPPassword, mailMessage); ErrorMessage = result ? string.Empty : FEMailHelper.ErrorMessage; return(result); }
/// <summary> /// 发送电子邮件 /// <para>SMTP服务器需要身份验证</para> /// </summary> /// <param name="smtpServer">发信SMTP服务器</param> /// <param name="smtpPort">端口,默认为25</param> /// <param name="userName">发信人邮箱地址</param> /// <param name="password">发信人邮箱密码</param> /// <param name="mailMessage">邮件内容</param> public bool SendEmail(string smtpServer, int smtpPort, string userName, string password, EMailMessage mailMessage) { return(SendEmail(smtpServer, smtpPort, true, userName, password, mailMessage)); }
/// <summary> /// 发送电子邮件 /// <para>SMTP服务器不需要身份验证</para> /// </summary> /// <param name="smtpServer">发信SMTP服务器</param> /// <param name="smtpPort">端口,默认为25</param> /// <param name="mailMessage">邮件内容</param> public bool SendEmail(string smtpServer, int smtpPort, EMailMessage mailMessage) { return(SendEmail(smtpServer, smtpPort, false, "", "", mailMessage)); }
/// <summary> /// 发送电子邮件 /// </summary> /// <param name="smtpServer">发信SMTP服务器</param> /// <param name="smtpPort">端口,默认为25</param> /// <param name="smtpCheck">是否进行SMTP验证</param> /// <param name="userName">发信人邮箱地址</param> /// <param name="password">发信人邮箱密码</param> /// <param name="mailMessage">邮件内容</param> /// <returns>电子邮件发送结果</returns> private bool SendEmail(string smtpServer, int smtpPort, bool smtpCheck, string userName, string password, EMailMessage mailMessage) { bool _connResult = Connect(smtpServer, smtpPort); if (!_connResult) { return(false); } string _priority = GetPriorityString(mailMessage.Priority); bool _htmlFlag = (mailMessage.BodyFormat == EMailFormat.HTML); string[] _sendBuffer; StringBuilder _sendString = new StringBuilder(); //进行SMTP验证 if (smtpCheck) { _sendBuffer = new String[4]; _sendBuffer[0] = string.Format("EHLO {0}{1}", smtpServer, CRLF); _sendBuffer[1] = string.Format("AUTH LOGIN{0}", CRLF); _sendBuffer[2] = string.Format("{0}{1}", Base64Encode(userName), CRLF); _sendBuffer[3] = string.Format("{0}{1}", Base64Encode(password), CRLF); bool _tmpResult = DialogEx(_sendBuffer, "SMTP服务器验证失败,请核对用户名和密码。"); if (!_tmpResult) { return(false); } } else { _sendString.Length = 0; //重置 _sendString.Append("HELO "); _sendString.Append(smtpServer); _sendString.Append(CRLF); bool _tmpResult = DialogEx(_sendString.ToString(), null); if (!_tmpResult) { return(false); } } //发件人地址 _sendString.Length = 0; //重置 _sendString.Append("MAIL FROM:<"); _sendString.Append(userName); _sendString.Append(">"); _sendString.Append(CRLF); bool _exResult = DialogEx(_sendString.ToString(), "发件人地址错误,或不能为空"); if (!_exResult) { return(false); } //收件人地址 _sendBuffer = new string[mailMessage.Recipients.Count]; for (int i = 0; i < mailMessage.Recipients.Count; i++) { _sendBuffer[i] = string.Format("RCPT TO:<{0}>{1}", mailMessage.Recipients[i] as string, CRLF); } _exResult = DialogEx(_sendBuffer, "收件人地址有误"); if (!_exResult) { return(false); } _sendString.Length = 0; //重置 _sendString.Append("DATA"); _sendString.Append(CRLF); _exResult = DialogEx(_sendString.ToString(), null); if (!_exResult) { return(false); } //发件人姓名 _sendString.Length = 0; //重置 _sendString.Append("From:"); _sendString.Append(mailMessage.FromName); _sendString.Append("<"); _sendString.Append(mailMessage.From); _sendString.Append(">"); _sendString.Append(CRLF); if (mailMessage.Recipients.Count == 0) { return(false); } else { _sendString.Append("To:=?"); _sendString.Append(mailMessage.Charset.ToUpper()); _sendString.Append("?B?"); _sendString.Append(Base64Encode(mailMessage.Recipients[0] as string)); _sendString.Append("?="); _sendString.Append("<"); _sendString.Append(mailMessage.Recipients[0] as string); _sendString.Append(">"); _sendString.Append(CRLF); } string _tmpString = null; if (string.IsNullOrEmpty(mailMessage.Subject)) { _tmpString = "Subject:"; } else if (string.IsNullOrEmpty(mailMessage.Charset)) { _tmpString = string.Format("Subject:{0}", mailMessage.Subject); } else { _tmpString = string.Format("Subject:=?{0}?B?{1}?=", mailMessage.Charset.ToUpper(), Base64Encode(mailMessage.Subject)); } _sendString.Append(_tmpString); _sendString.Append(CRLF); _sendString.Append("X-Priority:"); _sendString.Append(_priority); _sendString.Append(CRLF); _sendString.Append("X-MSMail-Priority:"); _sendString.Append(_priority); _sendString.Append(CRLF); _sendString.Append("Importance:"); _sendString.Append(_priority); _sendString.Append(CRLF); _sendString.Append("X-Mailer: DawnXZ.NuclearUtility.EMailOperation Pubclass [cn]"); _sendString.Append(CRLF); _sendString.Append("MIME-Version: 1.0"); _sendString.Append(CRLF); if (mailMessage.Attachments.Count > 0) { _sendString.Append("Content-Type: multipart/mixed;"); _sendString.Append(CRLF); _sendString.Append(" boundary=\"====="); if (_htmlFlag) { _sendString.Append("001_Dragon520636771063_"); } else { _sendString.Append("001_Dragon303406132050_"); } _sendString.Append("=====\""); _sendString.Append(CRLF); _sendString.Append(CRLF); } if (_htmlFlag) { if (mailMessage.Attachments.Count > 0) { _sendString.Append("Content-Type: multipart/alternative;"); //内容格式和分隔符 _sendString.Append(CRLF); _sendString.Append(" boundary=\"=====003_Dragon520636771063_=====\""); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append("This is a multi-part message in MIME format."); _sendString.Append(CRLF); _sendString.Append(CRLF); } else { _sendString.Append("This is a multi-part message in MIME format."); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append("--=====001_Dragon520636771063_====="); _sendString.Append(CRLF); _sendString.Append("Content-Type: multipart/alternative;"); //内容格式和分隔符 _sendString.Append(CRLF); _sendString.Append(" boundary=\"=====003_Dragon520636771063_=====\""); _sendString.Append(CRLF); _sendString.Append(CRLF); } _sendString.Append("--=====003_Dragon520636771063_====="); _sendString.Append(CRLF); _sendString.Append("Content-Type: text/plain;"); _sendString.Append(CRLF); if (string.IsNullOrEmpty(mailMessage.Charset)) { _sendString.Append(" charset=\"iso-8859-1\""); } else { _sendString.Append(" charset=\""); _sendString.Append(mailMessage.Charset.ToLower()); _sendString.Append("\""); } _sendString.Append(CRLF); _sendString.Append("Content-Transfer-Encoding: base64"); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append(Base64Encode("邮件内容为HTML格式,请选择HTML方式查看")); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append("--=====003_Dragon520636771063_====="); _sendString.Append(CRLF); _sendString.Append("Content-Type: text/html;"); _sendString.Append(CRLF); if (string.IsNullOrEmpty(mailMessage.Charset)) { _sendString.Append(" charset=\"iso-8859-1\""); } else { _sendString.Append(" charset=\""); _sendString.Append(mailMessage.Charset.ToLower()); _sendString.Append(CRLF); } _sendString.Append("Content-Transfer-Encoding: base64"); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append(Base64Encode(mailMessage.Body)); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append("--=====003_Dragon520636771063_=====--"); _sendString.Append(CRLF); } else { if (mailMessage.Attachments.Count > 0) { _sendString.Append("--=====001_Dragon303406132050_====="); _sendString.Append(CRLF); } _sendString.Append("Content-Type: text/plain;"); _sendString.Append(CRLF); if (string.IsNullOrEmpty(mailMessage.Charset)) { _sendString.Append(" charset=\"iso-8859-1\""); } else { _sendString.Append(" charset=\""); _sendString.Append(mailMessage.Charset.ToLower()); _sendString.Append("\""); } _sendString.Append(CRLF); _sendString.Append("Content-Transfer-Encoding: base64"); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append(Base64Encode(mailMessage.Body)); _sendString.Append(CRLF); } if (mailMessage.Attachments.Count > 0) { for (int i = 0; i < mailMessage.Attachments.Count; i++) { string _filePath = mailMessage.Attachments[i] as string; _sendString.Append("--====="); if (_htmlFlag) { _sendString.Append("001_Dragon520636771063_"); } else { _sendString.Append("001_Dragon303406132050_"); } _sendString.Append("====="); _sendString.Append(CRLF); _sendString.Append("Content-Type: text/plain;"); _sendString.Append(CRLF); _sendString.Append(" name=\"=?"); _sendString.Append(mailMessage.Charset.ToUpper()); _sendString.Append("?B?"); _sendString.Append(Base64Encode(_filePath.Substring(_filePath.LastIndexOf("\\") + 1))); _sendString.Append("?=\""); _sendString.Append(CRLF); _sendString.Append("Content-Transfer-Encoding: base64"); _sendString.Append(CRLF); _sendString.Append("Content-Disposition: attachment;"); _sendString.Append(CRLF); _sendString.Append(" filename=\"=?"); _sendString.Append(mailMessage.Charset.ToUpper()); _sendString.Append("?B?"); _sendString.Append(Base64Encode(_filePath.Substring(_filePath.LastIndexOf("\\") + 1))); _sendString.Append("?=\""); _sendString.Append(CRLF); _sendString.Append(CRLF); _sendString.Append(GetStream(_filePath)); _sendString.Append(CRLF); _sendString.Append(CRLF); } _sendString.Append("--====="); if (_htmlFlag) { _sendString.Append("001_Dragon520636771063_"); } else { _sendString.Append("001_Dragon303406132050_"); } _sendString.Append("=====--"); _sendString.Append(CRLF); _sendString.Append(CRLF); } _sendString.Append(CRLF); _sendString.Append("."); _sendString.Append(CRLF); _exResult = DialogEx(_sendString.ToString(), "错误信件信息"); if (!_exResult) { return(false); } _sendString.Length = 0; //重置 _sendString.Append("QUIT"); _sendString.Append(CRLF); _exResult = DialogEx(_sendString.ToString(), "断开连接时错误"); if (!_exResult) { return(false); } FNetworkStream.Close(); FTcpClient.Close(); return(true); }