使用 MailboxAddress(String) 构造函数发送带有 mailKit 过时警告的电子邮件

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,请告诉我。

ton*_*lla 7

它只是将显示在收件人身上的电子邮件地址和显示名称。

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)

  • 由于您的示例代码片段没有显示名称,因此只需执行:`To.AddRange(to.Select(x =&gt; new MailboxAddress(string.Empty, x)));` (3认同)