ASP.NET Core中发送电子邮件的最佳架构是使用异步方法和多个服务来管理不同类型的电子邮件。下面是示例代码:
public interface IEmailService
{
Task SendAsync(EmailMessage message);
}
public class OrderConfirmationEmailService : IEmailService
{
public async Task SendAsync(EmailMessage message)
{
// 发送订单确认电子邮件
}
}
public class PasswordResetEmailService : IEmailService
{
public async Task SendAsync(EmailMessage message)
{
// 发送密码重置电子邮件
}
}
public interface IEmailServiceFactory
{
IEmailService GetEmailService(EmailMessageType messageType);
}
public class EmailServiceFactory : IEmailServiceFactory
{
private readonly IServiceProvider _serviceProvider;
public EmailServiceFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IEmailService GetEmailService(EmailMessageType messageType)
{
switch (messageType)
{
case EmailMessageType.OrderConfirmation:
return _serviceProvider.GetService(typeof(OrderConfirmationEmailService)) as OrderConfirmationEmailService;
case EmailMessageType.PasswordReset:
return _serviceProvider.GetService(typeof(PasswordResetEmailService)) as PasswordResetEmailService;
default:
throw new ArgumentException($"Invalid email message type: {messageType}");
}
}
}
public class EmailService : IEmailService
{
private readonly IEmailServiceFactory _emailServiceFactory;
public EmailService(IEmailServiceFactory emailServiceFactory)
{
_emailServiceFactory = emailServiceFactory;
}
public async Task SendAsync(EmailMessage message)
{
var emailService = _emailServiceFactory.GetEmailService(message.Type);
await emailService.SendAsync(message);
}
}
public async Task SendOrderConfirmationEmailAsync()
{
var emailMessage = new EmailMessage
{
To = "example@example.com",
Subject = "Order Confirmation",
Body = "Thank you for your order"
};
var emailService = _serviceProvider.GetService(typeof(EmailService)) as EmailService;
emailMessage.Type = EmailMessageType.OrderConfirmation;
await emailService.SendAsync(emailMessage);
}
public async Task SendPasswordResetEmailAsync()
{
var emailMessage = new EmailMessage
{
To = "example@example.com