添加项目文件。
This commit is contained in:
79
EmailLib/QEmailSender.cs
Normal file
79
EmailLib/QEmailSender.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using MailKit.Net.Smtp;
|
||||
using MailKit.Security;
|
||||
using MimeKit;
|
||||
using Email;
|
||||
using System.Text;
|
||||
|
||||
namespace TechHelper.Features
|
||||
{
|
||||
public class QEmailSender : IEmailSender
|
||||
{
|
||||
public async Task SendEmailAsync(string toEmail, string subject, string body)
|
||||
{
|
||||
var secureSocketOption = SecureSocketOptions.StartTls;
|
||||
try
|
||||
{
|
||||
var message = new MimeMessage();
|
||||
message.From.Add(new MailboxAddress("TechHelper", EmailConfiguration.EmailFrom));
|
||||
message.To.Add(new MailboxAddress("", toEmail));
|
||||
message.Subject = subject;
|
||||
message.Body = new TextPart(MimeKit.Text.TextFormat.Html)
|
||||
{
|
||||
Text = body
|
||||
};
|
||||
|
||||
|
||||
using (var client = new SmtpClient())
|
||||
{
|
||||
await client.ConnectAsync(EmailConfiguration.SmtpHost, EmailConfiguration.SmtpPort, secureSocketOption);
|
||||
|
||||
// 移除 XOAUTH2 认证机制,避免某些环境下出现异常
|
||||
// 如果不加这行,某些情况下可能会遇到 MailKit.Security.AuthenticationException: XOAUTH2 is not supported
|
||||
client.AuthenticationMechanisms.Remove("XOAUTH2");
|
||||
|
||||
await client.AuthenticateAsync(EmailConfiguration.EmailFrom, EmailConfiguration.Password);
|
||||
await client.SendAsync(message);
|
||||
await client.DisconnectAsync(true);
|
||||
}
|
||||
|
||||
Console.WriteLine("邮件发送成功 (QQ 邮箱)!");
|
||||
}
|
||||
catch (TypeInitializationException ex)
|
||||
{
|
||||
Console.WriteLine("捕获到 SmtpClient 的 TypeInitializationException!");
|
||||
Console.WriteLine($"异常消息: {ex.Message}");
|
||||
|
||||
Exception? inner = ex.InnerException; // 获取第一层内部异常
|
||||
int innerCount = 1;
|
||||
while (inner != null)
|
||||
{
|
||||
Console.WriteLine($"--> 内部异常 {innerCount}: {inner.GetType().Name}");
|
||||
Console.WriteLine($"--> 内部异常消息: {inner.Message}");
|
||||
inner = inner.InnerException; // 获取下一层内部异常
|
||||
innerCount++;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"捕获到其他类型的异常: {ex.GetType().Name}");
|
||||
Console.WriteLine($"异常消息: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task SendEmailAsync(string toEmail , string body)
|
||||
{
|
||||
await SendEmailAsync(toEmail, EmailConfiguration.SubDescribe, body);
|
||||
}
|
||||
|
||||
public async Task SendEmailAuthcodeAsync(string toEmail, string authCode)
|
||||
{
|
||||
string htmlTemplateString = EmailTemap._email;
|
||||
string htmlBody = htmlTemplateString
|
||||
.Replace("{{AppName}}", "TechHelper")
|
||||
.Replace("{{VerificationCode}}", authCode)
|
||||
.Replace("{{ExpirationMinutes}}", "30")
|
||||
.Replace("{{SupportEmail}}", "TechHelper");
|
||||
await SendEmailAsync(toEmail, htmlBody);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user