EI-Image-Viewer-Api/IRaCIS.Core.Application/Helper/SendEmailHelper.cs

153 lines
3.8 KiB
C#

using MailKit;
using MailKit.Security;
using MimeKit;
namespace IRaCIS.Core.Application.Helper;
public static class SendEmailHelper
{
public static async Task SendEmailAsync(MimeMessage messageToSend, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
{
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
if (messageSentSuccess != null)
{
smtp.MessageSent += messageSentSuccess;
}
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
await smtp.ConnectAsync("smtp.qq.com", 465, SecureSocketOptions.SslOnConnect);
await smtp.AuthenticateAsync("zhou941003@qq.com", "sqfhlpfdvnexbcab");
await smtp.SendAsync(messageToSend);
await smtp.DisconnectAsync(true);
}
}
public static async Task SendEmailAsync(SMTPEmailConfig sMTPEmailConfig, EventHandler<MessageSentEventArgs>? messageSentSuccess = null)
{
var messageToSend = new MimeMessage();
//主题
messageToSend.Subject = sMTPEmailConfig.TopicDescription;
//发件地址
messageToSend.From.Add(sMTPEmailConfig.FromEmailAddress);
//收件地址
if (sMTPEmailConfig.ToMailAddressList.Count == 0)
{
throw new ArgumentException("没有收件人");
}
else
{
foreach (var item in sMTPEmailConfig.ToMailAddressList)
{
messageToSend.To.Add(item);
}
//抄送
foreach (var copyToMailAddress in sMTPEmailConfig.CopyToMailAddressList)
{
messageToSend.Cc.Add(copyToMailAddress);
}
}
var builder = new BodyBuilder();
//html body
builder.HtmlBody = sMTPEmailConfig.HtmlBodyStr;
//附件
foreach (var item in sMTPEmailConfig.EmailAttachMentConfigList)
{
//builder.Attachments.Add(item.FileName, item.FileData);
builder.Attachments.Add(item.FileName, item.FileStream);
}
messageToSend.Body = builder.ToMessageBody();
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
{
if (messageSentSuccess != null)
{
smtp.MessageSent += messageSentSuccess;
}
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
await smtp.ConnectAsync(sMTPEmailConfig.Host, sMTPEmailConfig.Port, SecureSocketOptions.SslOnConnect);
await smtp.AuthenticateAsync(sMTPEmailConfig.UserName, sMTPEmailConfig.AuthorizationCode);
await smtp.SendAsync(messageToSend);
await smtp.DisconnectAsync(true);
}
}
}
public class SMTPEmailConfig
{
public int Port { get; set; } = 465;
public string Host { get; set; } = "smtp.163.com";
public string UserName { get; set; } = "iracis_grr@163.com";
public string AuthorizationCode { get; set; } = "XLWVQKZAEKLDWOAH";
//邮件HtmlBody
public string HtmlBodyStr { get; set; } = string.Empty;
//发
public MailboxAddress FromEmailAddress { get; set; } = new MailboxAddress("GRR", "iracis_grr@163.com");
//收
public List<MailboxAddress> ToMailAddressList { get; set; } = new List<MailboxAddress>();
//抄送
public List<MailboxAddress> CopyToMailAddressList { get; set; } = new List<MailboxAddress>();
//邮件主题
public string TopicDescription { get; set; } = string.Empty;
//邮件附件
public List<EmailAttachMentConfig> EmailAttachMentConfigList { get; set; } = new List<EmailAttachMentConfig>() { };
}
public class EmailAttachMentConfig
{
public string FileName { get; set; }
public Stream FileStream { get; set; }
public byte[] FileData { get; set; }
}