using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;
using System.Net;
using QuickEAS.CoreLib.Utils;
namespace QuickEAS.Network
{
/// <summary>
/// 邮件发送方式
/// </summary>
public enum LibMailSendWay
{
/// <summary>
/// 以SMTP方式
/// </summary>
BySMTP,
/// <summary>
/// 以WEB方式
/// </summary>
ByWeb
}
/// <summary>
/// 邮件发送参数
/// </summary>
public class LibMailSendArgs
{
public LibMailSendWay SendWay { get; set; }
/// <summary>
/// SMTP主机
/// </summary>
public string SMTPHost { get; set; }
/// <summary>
/// SMTP端口
/// </summary>
public int SMTPPort { get; set; }
/// <summary>
/// 使用SSL
/// </summary>
public bool EnableSSL { get; set; }
/// <summary>
/// 发件人地址
/// </summary>
public string MailFrom { get; set; }
/// <summary>
/// 收件人地址
/// </summary>
public string MailTo { get; set; }
/// <summary>
/// 登入帐号
/// </summary>
public string UserID { get; set; }
/// <summary>
/// 登入密码
/// </summary>
public string UserPassword { get; set; }
/// <summary>
/// 邮件标题
/// </summary>
public string Subject { get; set; }
/// <summary>
/// 邮件内容
/// </summary>
public string Body { get; set; }
/// <summary>
/// HTML方式发送
/// </summary>
public bool IsHTML { get; set; }
}
/// <summary>
/// 邮件发送类
/// </summary>
public class LibSendMail
{
public static bool PostEmailBySMTP(LibMailSendArgs args, int tryCountIfSendFail = 3)
{
bool result = false;
MailMessage mailmsg = new MailMessage();
mailmsg.From = new MailAddress(args.MailFrom); //定义发件人
string[] mailToArray = LibSysUtils.SplitString(args.MailTo, ";");
if (mailToArray.Length > 0)
{
foreach (string mailTo in mailToArray)
{
MailAddress mailAddress = null;
if (mailTo.Contains("<") && mailTo.Contains(">"))
{
//易贸网络<service@emaosoft.com>
string[] strs = LibSysUtils.SplitString(mailTo, "<");
string displayName = strs[0];
strs = LibSysUtils.SplitString(strs[1], ">");
string email = strs[0];
mailAddress = new MailAddress(email, displayName);
}
else mailAddress = new MailAddress(mailTo);
mailmsg.To.Add(mailAddress); //添加收件人
}
mailmsg.Subject = args.Subject; //邮件标题
mailmsg.Body = args.Body; //邮件内容
mailmsg.BodyEncoding = Encoding.UTF8;
mailmsg.IsBodyHtml = args.IsHTML;
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = args.SMTPHost;//发送邮件服务器
smtpClient.Port = args.SMTPPort;
smtpClient.Credentials = new NetworkCredential(args.UserID, args.UserPassword);
smtpClient.EnableSsl = args.EnableSSL;
smtpClient.Timeout = 1000 * 60; //60秒超时
int failIndex = 0;
do
{
try
{
smtpClient.Send(mailmsg);
break;
}
catch (Exception ex)
{
failIndex++;
if (failIndex < tryCountIfSendFail)
{
LibSysUtils.AppendLog(LibSysUtils.GetInnerException(ex));
LibSysUtils.Sleep(5000);
}
else
throw LibSysUtils.GetInnerException(ex);
}
}
while (failIndex < tryCountIfSendFail);
result = true;
}
return result;
}
public static bool PostEmailByWeb(LibMailSendArgs args)
{
return false;
}
public static bool PostEmail(LibMailSendArgs args)
{
bool result = false;
switch (args.SendWay)
{
case LibMailSendWay.BySMTP:
result = PostEmailBySMTP(args);
break;
case LibMailSendWay.ByWeb:
result = PostEmailByWeb(args);
break;
}
return result;
}
}
}