Files
shgx_tz_mes_backend_sync/ZR.Common/MailHelper.cs

142 lines
5.0 KiB
C#
Raw Normal View History

2022-01-02 10:48:27 +08:00
using Infrastructure;
using MailKit.Net.Smtp;
2021-09-28 18:17:31 +08:00
using MimeKit;
using MimeKit.Text;
using System;
using System.Collections.Generic;
using System.IO;
namespace ZR.Common
{
public class MailHelper
{
/// <summary>
/// 发送人邮箱
/// </summary>
public string FromEmail { get; set; } = "";
2022-01-02 10:48:27 +08:00
private readonly MailOptions mailOptions = new();
2021-09-28 18:17:31 +08:00
2022-01-02 10:48:27 +08:00
public MailHelper()
{
2022-02-23 18:30:17 +08:00
AppSettings.Bind("MailOptions", mailOptions);
2024-06-07 11:04:26 +08:00
FromEmail = mailOptions.FromEmail;
2022-01-02 10:48:27 +08:00
}
2023-06-07 13:41:42 +08:00
public MailHelper(MailOptions _mailOptions)
2021-09-28 18:17:31 +08:00
{
2023-06-07 13:41:42 +08:00
this.mailOptions = _mailOptions;
FromEmail = _mailOptions.FromEmail;
2021-09-28 18:17:31 +08:00
}
/// <summary>
2022-07-01 20:01:40 +08:00
/// 发送一个
2021-09-28 18:17:31 +08:00
/// </summary>
/// <param name="toAddress"></param>
/// <param name="subject"></param>
/// <param name="text"></param>
/// <param name="path"></param>
2023-06-07 13:41:42 +08:00
public string SendMail(string toAddress, string subject, string text, string path = "", string html = "")
2021-09-28 18:17:31 +08:00
{
IEnumerable<MailboxAddress> mailboxes = new List<MailboxAddress>() {
2021-12-21 21:29:55 +08:00
new MailboxAddress(toAddress, toAddress)
2021-09-28 18:17:31 +08:00
};
2023-06-07 13:41:42 +08:00
return SendMail(mailboxes, subject, text, path, html);
2021-09-28 18:17:31 +08:00
}
/// <summary>
/// 发送多个邮箱
/// </summary>
/// <param name="toAddress"></param>
/// <param name="subject"></param>
/// <param name="text"></param>
/// <param name="path"></param>
2023-06-07 13:41:42 +08:00
public string SendMail(string[] toAddress, string subject, string text, string path = "", string html = "")
2021-09-28 18:17:31 +08:00
{
IList<MailboxAddress> mailboxes = new List<MailboxAddress>() { };
foreach (var item in toAddress)
{
2021-12-21 21:29:55 +08:00
mailboxes.Add(new MailboxAddress(item, item));
2021-09-28 18:17:31 +08:00
}
2023-06-07 13:41:42 +08:00
return SendMail(mailboxes, subject, text, path, html);
2021-09-28 18:17:31 +08:00
}
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="toAddress"></param>
2022-01-02 15:56:23 +08:00
/// <param name="subject">主题</param>
2021-09-28 18:17:31 +08:00
/// <param name="text"></param>
/// <param name="path">附件url地址</param>
2022-01-02 15:56:23 +08:00
/// <param name="html">网页HTML内容</param>
2023-06-07 13:41:42 +08:00
private string SendMail(IEnumerable<MailboxAddress> toAddress, string subject, string text, string path = "", string html = "")
2021-09-28 18:17:31 +08:00
{
MimeMessage message = new MimeMessage();
//发件人
2023-06-07 13:41:42 +08:00
message.From.Add(new MailboxAddress(mailOptions.FromName, mailOptions.FromEmail));
2021-09-28 18:17:31 +08:00
//收件人
message.To.AddRange(toAddress);
message.Subject = subject;
2022-07-01 20:01:40 +08:00
message.Date = DateTime.Now;
2023-06-07 13:41:42 +08:00
2021-09-28 18:17:31 +08:00
//创建附件Multipart
Multipart multipart = new Multipart("mixed");
2021-12-21 21:29:55 +08:00
var alternative = new MultipartAlternative();
2021-09-28 18:17:31 +08:00
//html内容
if (!string.IsNullOrEmpty(html))
{
var Html = new TextPart(TextFormat.Html)
{
Text = html
};
2021-12-21 21:29:55 +08:00
alternative.Add(Html);
2021-09-28 18:17:31 +08:00
}
//文本内容
2022-07-01 20:01:40 +08:00
//if (!string.IsNullOrEmpty(text))
//{
var plain = new TextPart(TextFormat.Plain)
2021-09-28 18:17:31 +08:00
{
2022-07-01 20:01:40 +08:00
Text = text + "\r\n\n\n" + mailOptions.Signature
};
alternative.Add(plain);
//}
2021-09-28 18:17:31 +08:00
//附件
if (!string.IsNullOrEmpty(path))
{
2022-01-02 15:56:23 +08:00
string[] files = path.Split(",");
foreach (var file in files)
2021-09-28 18:17:31 +08:00
{
2022-01-02 15:56:23 +08:00
MimePart attachment = new()
{
Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
//读取文件,只能用绝对路径
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
//文件名字
FileName = Path.GetFileName(path)
};
alternative.Add(attachment);
}
2021-09-28 18:17:31 +08:00
}
2021-12-21 21:29:55 +08:00
multipart.Add(alternative);
2021-09-28 18:17:31 +08:00
//赋值邮件内容
message.Body = multipart;
2022-01-02 15:56:23 +08:00
2021-09-28 18:17:31 +08:00
//开始发送
2022-01-02 15:56:23 +08:00
using var client = new SmtpClient();
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
2023-06-07 13:41:42 +08:00
//client.CheckCertificateRevocation = false;
client.Connect(mailOptions.Smtp, mailOptions.Port, mailOptions.UseSsl);
2021-09-28 18:17:31 +08:00
2022-01-02 15:56:23 +08:00
//登录,发送
//特别说明对于服务器端的中文相应Exception中有编码问题显示乱码了
2023-06-07 13:41:42 +08:00
client.Authenticate(System.Text.Encoding.UTF8, mailOptions.FromEmail, mailOptions.Password);
2021-09-28 18:17:31 +08:00
2023-06-07 13:41:42 +08:00
var result = client.Send(message);
2022-01-02 15:56:23 +08:00
//断开
client.Disconnect(true);
2023-06-07 13:41:42 +08:00
Console.WriteLine($"【{DateTime.Now}】发送邮件结果{result}");
return result;
2022-01-02 15:56:23 +08:00
}
2021-09-28 18:17:31 +08:00
}
}