Asp.net core 发送邮件
在开始之前,先做好准备工作
在配置文件中设置好发送邮件的基本信息,在
appsettings.json
中添加:
"NotificationMetadata": {
"Sender": "wenjie.1223@qq.com",
"SmtpServer": "smtp.qq.com",
"Port": 465,
"Username": "wenjie.1223@qq.com",
"Password": "pssword"
}
在Startup.cs
中ConfigureServices
注册:
public void ConfigureServices(IServiceCollection services)
{
var notificationMetadata = Configuration.GetSection("NotificationMetadata").Get<NotificationMetadata>();
services.AddSingleton(notificationMetadata);
services.AddControllersWithViews();
}
创建ModelNotificationMetadata
类:
public class NotificationMetadata
{
public string Sender { get; set; }
public string SmtpServer { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
EmailMessage
类:
public class EmailMessage
{
public MailboxAddress Sender { get; set; }
public string Subject { get; set; }
public string Reciever { get; set; }
public string Content { get; set; }
public static MimeMessage CreateEmailMessage(EmailMessage message)
{
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.Subject = message.Subject;
// 支持Html和text文本格式
mimeMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
{ Text = message.Content };
return mimeMessage;
}
}
Controllers中添加构造方法:
private NotificationMetadata _notificationMetadata;
public MailController(NotificationMetadata notificationMetadata)
{
this._notificationMetadata = notificationMetadata;
}
使用自带的SmtpClient
public string sendEmail()
{
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(_notificationMetadata.Sender, "System");
// 输入发送的人
mailMessage.To.Add(new MailAddress("email_address"));
// 输入cc的人,如果有多个可以多次Add
mailMessage.CC.Add(new MailAddress("email_address"));
mailMessage.CC.Add(new MailAddress("email_address"));
mailMessage.Subject = "这是邮件的标题";
StringBuilder sb = new StringBuilder();
sb.Append("这是邮件的内容");
mailMessage.Body = sb.ToString();
mailMessage.SubjectEncoding = Encoding.UTF8;
mailMessage.BodyEncoding = Encoding.UTF8;
SmtpClient client = new SmtpClient();
client.Host = _notificationMetadata.SmtpServer;
client.Port = _notificationMetadata.Port;
client.EnableSsl = true;
client.Credentials = new NetworkCredential(_notificationMetadata.UserName, _notificationMetadata.Password);
try
{
client.Send(mailMessage);
return "邮件已发送,请注意查收!";
}
catch (Exception ex)
{
return ex.ToString();
}
}
使用MimeKit
public string sendEmailMimeKit()
{
EmailMessage message = new EmailMessage();
message.Sender = new MailboxAddress("System", _notificationMetadata.Sender);
message.Subject = "";
message.Content = "";
var mimeMessage = EmailMessage.CreateEmailMessage(message);
mimeMessage.To.Add(address: new MailboxAddress(""));
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, useSsl:true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
try
{
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
return "邮件已发送,请注意查收!";
}
catch (Exception ex)
{
return ex.ToString();
}
}
}