public class MailHelper
{
static string MailFrom = ConfigurationManager.AppSettings["MailFrom"].ToString();
static string MailFromAccount = ConfigurationManager.AppSettings["MailUserName"].ToString();
static string MailPWD = ConfigurationManager.AppSettings["MailPassword"].ToString();
static string DefaultMailTo = ConfigurationManager.AppSettings["DefaultMailTo"].ToString();
static string SMTPServer = ConfigurationManager.AppSettings["MailSMTP"].ToString();
static string SMTPServerPort = ConfigurationManager.AppSettings["MailPort"].ToString();
#region send email by mailkit
public static void SendEmail(string mailTo,string mailCC, bool isHtml,string subject,string body,string mailAttachement)
{
if (string.IsNullOrEmpty(mailTo.Trim()))
{
mailTo = DefaultMailTo;
}
if (string.IsNullOrEmpty(SMTPServerPort.Trim()))
{
SMTPServerPort = "25";
}
var message = new MimeMessage();
List<MailboxAddress> Tos = new List<MailboxAddress>();
List<MailboxAddress> Ccs = new List<MailboxAddress>();
message.From.Add(new MailboxAddress(MailFrom, MailFromAccount));
foreach (var to in mailTo.Trim().Split(';'))
{
if (!string.IsNullOrEmpty(to))
{
Tos.Add(MailboxAddress.Parse(to));
}
}
message.To.AddRange(Tos);
if (!string.IsNullOrEmpty(mailCC))
{
foreach (var cc in mailCC.Trim().Split(';'))
{
if (!string.IsNullOrEmpty(cc))
{
Ccs.Add(MailboxAddress.Parse(cc));
}
}
}
if (Ccs.Count > 0)
{
message.Cc.AddRange(Ccs);
}
message.Subject = subject;
var builder = new BodyBuilder();
if (isHtml)
{
builder.HtmlBody = body;
}
else
{
builder.TextBody = body;
}
if (!string.IsNullOrEmpty(mailAttachement))
{
string[] attachementList = mailAttachement.Trim().Split(';').Distinct().ToArray();
for (int i = 0; i < attachementList.Length; i++)
{
if (attachementList[i].Length > 0)
{
builder.Attachments.Add(attachementList[i]);
}
}
}
message.Body = builder.ToMessageBody();
try
{
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
try
{
smtp.MessageSent += (sender, args) =>
{
};
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
smtp.Connect(SMTPServer, Convert.ToInt32(SMTPServerPort), MailKit.Security.SecureSocketOptions.StartTls);
smtp.AuthenticationMechanisms.Remove("XOAUTH2");
smtp.Authenticate(MailFromAccount, MailPWD);
smtp.Send(message);
smtp.Disconnect(true);
}
catch (Exception ex)
{
LoggerHelper.Error("Error: \n\t Error Message:" + ex.ToString());
LoggerHelper.Error("\t Error Stack Trace:" + ex.StackTrace);
LoggerHelper.Error("Add Mail To: " + mailTo);
LoggerHelper.Error("Add Mail CC: " + mailCC);
LoggerHelper.Error("Add Subject: " + subject);
LoggerHelper.Error("Add Body: " + body);
}
finally
{
if (smtp.IsConnected)
{
smtp.Disconnect(true);
}
}
}
}
catch (Exception ex)
{
LoggerHelper.Error("Error: \n\t Error Message:" + ex.ToString());
LoggerHelper.Error("\t Error Stack Trace:" + ex.StackTrace);
LoggerHelper.Error("Add Mail To: " + mailTo);
LoggerHelper.Error("Add Mail CC: " + mailCC);
LoggerHelper.Error("Add Subject: " + subject);
LoggerHelper.Error("Add Body: " + body);
}
}
#endregion
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!