如何解决使用MailKitAddressString构造函数发送带有mailKit的电子邮件过时警告
我有以下代码可以很好地发送电子邮件,但是我收到这些警告,要求我将某些方法标记为“过时”。我查看了mailKit网站上的文档,并说我应该使用与MailboxAddress(String)
不同的构造函数。我明白了,但是在如何实现他们所要求的方式时遇到了麻烦,这似乎很简单,但我认为我缺少一步。这是推荐MailboxAddress(String,String)
new way of doing it的方法之一。
代码如下:
控制器
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();
}
Message.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;
}
}
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();
}
}
}
接口
public interface IEmailSender
{
void SendEmail(Message message);
}
如果您也想要StartUp.cs,请告诉我。
解决方法
只有电子邮件地址和显示名称会显示在收件人上。
var address = new MailboxAddress("Tonton","tonton@example.com");
输出
更新
如果要添加显示名称。您可以拥有类似的东西。
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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。