whi*_*isk 3 c# asp.net-mvc mailkit asp.net-core
我有以下代码,可以很好地发送电子邮件,但我收到这些警告,表明我应该将某些方法标记为“已过时”。我查看了mailKit网站上的文档,它说我应该使用与MailboxAddress(String). 我明白了,但在如何实现他们要求的方式方面遇到了麻烦,这看起来很简单,但我认为我错过了一步。MailboxAddress(String, String) 这是推荐的新方法之一。
代码如下:
控制器
public IActionResult RequestPassword()
{
var message = new Message(new string[]
{
"email@gmail.com"
},
"Test Email",
"This is the content from out email."
);
_emailSender.SendEmail(message);
return View();
}
Run Code Online (Sandbox Code Playgroud)
消息.cs
对于此类,警告会在线弹出To.AddRange(to.Select(x => new MailboxAddress(x)));
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<string> to, string subject, string content)
{
To = new List<MailboxAddress>();
To.AddRange(to.Select(x => new MailboxAddress(x)));
Subject = subject;
Content = content;
}
}
Run Code Online (Sandbox Code Playgroud)
EmailSender 类 对于此类,在线弹出警告 emailMessage.From.Add(new MailboxAddress(_emailConfig.From));
public class EmailSender : IEmailSender
{
private readonly EmailConfiguration _emailConfig;
public EmailSender(EmailConfiguration emailConfig)
{
_emailConfig = emailConfig;
}
// This creates the Email and then sends it.
public void SendEmail(Message message)
{
var emailMessage = CreateEmailMessage(message);
Send(emailMessage);
}
// Creates Email Message
private MimeMessage CreateEmailMessage(Message message)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress(_emailConfig.From));
emailMessage.To.AddRange(message.To);
emailMessage.Subject = message.Subject;
emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)
{
Text = message.Content
};
return emailMessage;
}
// Sends the email
private void Send(MimeMessage mailMessage)
{
using var client = new SmtpClient();
try
{
client.Connect(_emailConfig.MailServer, _emailConfig.MailPort, false);
client.Authenticate(_emailConfig.Username, _emailConfig.Password);
client.Send(mailMessage);
}
catch (Exception)
{
throw;
}
finally
{
client.Disconnect(true);
client.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
界面
public interface IEmailSender
{
void SendEmail(Message message);
}
Run Code Online (Sandbox Code Playgroud)
如果您也想要 StartUp.cs,请告诉我。
它只是将显示在收件人身上的电子邮件地址和显示名称。
var address = new MailboxAddress("Tonton", "tonton@example.com");
Run Code Online (Sandbox Code Playgroud)
输出
更新
如果您想添加显示名称。你可以拥有这样的东西。
public class EmailAddress
{
public string Address { get; set; }
public string DisplayName { get; set; }
}
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<EmailAddress> to, string subject, string content)
{
To = new List<MailboxAddress>();
To.AddRange(to.Select(x => new MailboxAddress(x.DisplayName, x.Address)));
Subject = subject;
Content = content;
}
}
Run Code Online (Sandbox Code Playgroud)