using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
namespace HslCommunication.BasicFramework
{
/****************************************************************************
*
* 创建日期:2017-02-27 10:29:31
* 功能:用来发送简单的邮件
* 说明:使用代理的方式来实现发送邮件
* 备注:静态对象直接提供了一个可供发送的163邮件和QQ邮件
*
***************************************************************************/
///
/// 软件的邮箱类,用于发送邮箱数据
///
///
/// 如果您想实现自己的邮件发送中心,就可以去对应的邮件服务器注册,如果是想快速实现邮件的发送,本系统提供了2个静态的已经注册好了的邮箱发送器。
///
///
/// 以下的代码演示了通过静态的发送对象来发送邮件,包含了发送普通的邮件,和发送html邮件。
///
///
public class SoftMail
{
#region Static Member
///
/// 系统连续发送失败的次数,为了不影响系统,连续三次失败就禁止发送
///
private static long SoftMailSendFailedCount { get; set; } = 0;
#endregion
#region Static Mail
///
/// 系统提供一个默认的163邮箱发送账号,只要更改接收地址即可发送服务,可能会被拦截
///
public static SoftMail MailSystem163 = new SoftMail(
mail =>
{
mail.Host = "smtp.163.com";//使用163的SMTP服务器发送邮件
mail.UseDefaultCredentials = true;
mail.EnableSsl = true;
mail.Port = 25;
mail.DeliveryMethod = SmtpDeliveryMethod.Network;
mail.Credentials = new System.Net.NetworkCredential("softmailsendcenter", "zxcvbnm6789");//密码zxcvbnm1234
},
"softmailsendcenter@163.com",
"hsl200909@163.com"
);
///
/// 系统提供一个默认的QQ邮箱发送账号,只要更改接收地址即可发送服务,发送成功概率比较高
///
public static SoftMail MailSystemQQ = new SoftMail(
mail =>
{
mail.Host = "smtp.qq.com";//使用QQ的SMTP服务器发送邮件
mail.UseDefaultCredentials = true;
mail.Port = 587;
mail.EnableSsl = true;
mail.DeliveryMethod = SmtpDeliveryMethod.Network;
mail.Credentials = new System.Net.NetworkCredential("974856779", "tvnlczxdumutbbic");//密码tvnlczxdumutbbic
},
"974856779@qq.com",
"hsl200909@163.com"
);
#endregion
#region Constructor
///
/// 实例化一个邮箱发送类,需要指定初始化信息
///
/// 初始化的方法
/// 发送地址,应该和账户匹配
/// 邮件接收地址
///
/// 初始化的方法比较复杂,需要参照示例代码。
///
///
///
///
public SoftMail(Action mailIni, string addr_From = "", string addr_to = "")
{
smtpClient = new SmtpClient();
mailIni(smtpClient);
MailFromAddress = addr_From;
MailSendAddress = addr_to;
}
#endregion
#region Private Member
///
/// 系统的邮件发送客户端
///
private SmtpClient smtpClient { get; set; }
///
/// 发送邮件的地址
///
private string MailFromAddress { get; set; } = "";
#endregion
#region Public Member
///
/// 邮件发送的地址
///
public string MailSendAddress { get; set; } = "";
#endregion
#region Private Method
private string GetExceptionMail(Exception ex)
{
return $"{StringResources.Language.Time}{DateTime.Now.ToString()}" +
$"{Environment.NewLine}{StringResources.Language.SoftWare}{ex.Source}" +
$"{Environment.NewLine}{StringResources.Language.ExceptionMessage}{ex.Message}" +
$"{Environment.NewLine}{StringResources.Language.ExceptionType}{ex.GetType().ToString()}" +
$"{Environment.NewLine}{StringResources.Language.ExceptionStackTrace}{ex.StackTrace}" +
$"{Environment.NewLine}{StringResources.Language.ExceptopnTargetSite}{ex.TargetSite.Name}";
}
#endregion
#region SendMail Support
///
/// 发生BUG至邮件地址,需要提前指定发送地址,否则失败
///
/// 异常的BUG,同样试用兼容类型
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(Exception ex)
{
return SendMail(ex, "");
}
///
/// 发送邮件至地址,需要提前指定发送地址,否则失败
///
/// 邮件主题
/// 邮件内容
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(string subject, string body)
{
return SendMail(MailSendAddress, subject, body);
}
///
/// 发送邮件至地址,需要提前指定发送地址,否则失败
///
/// 邮件主题
/// 邮件内容
/// 是否是html格式化文本
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(string subject, string body, bool isHtml)
{
return SendMail(MailSendAddress, subject, body, isHtml);
}
///
/// 发生BUG至邮件地址,需要提前指定发送地址,否则失败
///
/// 异常的BUG,同样试用兼容类型
/// 额外信息
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(Exception ex, string addtion)
{
if (string.IsNullOrEmpty(MailSendAddress)) return false;
return SendMail(MailSendAddress, StringResources.Language.BugSubmit, string.IsNullOrEmpty(addtion) ? GetExceptionMail(ex) :
$"User:{addtion}{Environment.NewLine}" + GetExceptionMail(ex));
}
///
/// 发送邮件的方法,需要指定接收地址,主题及内容
///
/// 接收地址
/// 邮件主题
/// 邮件内容
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(string addr_to, string subject, string body)
{
return SendMail(addr_to, subject, body, false);
}
///
/// 发送邮件的方法,默认发送别名,优先级,是否HTML
///
/// 接收地址
/// 邮件主题
/// 邮件内容
/// 是否是html格式的内容
/// 是否发送成功,内容不正确会被视为垃圾邮件
public bool SendMail(string addr_to, string subject, string body, bool isHtml)
{
return SendMail(MailFromAddress, StringResources.Language.MailServerCenter, new string[] { addr_to }, subject, body, MailPriority.Normal, isHtml);
}
///
/// 发送邮件的方法,需要提供完整的参数信息
///
/// 发送地址
/// 发送别名
/// 接收地址
/// 邮件主题
/// 邮件内容
/// 优先级
/// 邮件内容是否是HTML语言
/// 发生是否成功,内容不正确会被视为垃圾邮件
public bool SendMail(string addr_from, string name, string[] addr_to, string subject, string body, MailPriority priority, bool isHtml)
{
if (SoftMailSendFailedCount > 10) { SoftMailSendFailedCount++; return true; }
using (MailMessage Message = new MailMessage())
{
try
{
Message.From = new MailAddress(addr_from, name, Encoding.UTF8);
foreach (var m in addr_to)
{
Message.To.Add(m);
}
Message.Subject = subject;
Message.Body = body;
Message.Body += Environment.NewLine + Environment.NewLine + Environment.NewLine + StringResources.Language.MailSendTail;
Message.SubjectEncoding = Encoding.UTF8;
Message.BodyEncoding = Encoding.UTF8;
Message.Priority = priority;
Message.IsBodyHtml = isHtml;
smtpClient.Send(Message);
//清空数据
SoftMailSendFailedCount = 0;
return true;
}
catch(Exception ex)
{
Console.WriteLine( SoftBasic.GetExceptionMessage( ex ) );
SoftMailSendFailedCount++;
return false;
}
}
}
#endregion
}
}