C# 我可以使用ASP.Net Core 3.0中的IEmailSender接口向多个收件人发送电子邮件吗

C# 我可以使用ASP.Net Core 3.0中的IEmailSender接口向多个收件人发送电子邮件吗,c#,email,asp.net-core,C#,Email,Asp.net Core,我是ASP.Net核心的初学者。实际上我正在使用ASP.NETCore3.0。我想向多个接收者发送电子邮件。我可以使用IEmailSender接口吗?或者有什么建议 我的IEmailSender实现如下: public class EmailSender : IEmailSender { private string host; private int port; private bool enableSSL; private string userName;

我是ASP.Net核心的初学者。实际上我正在使用ASP.NETCore3.0。我想向多个接收者发送电子邮件。我可以使用IEmailSender接口吗?或者有什么建议

我的IEmailSender实现如下:

public class EmailSender : IEmailSender
{
    private string host;
    private int port;
    private bool enableSSL;
    private string userName;
    private string password;

    public EmailSender(string host, int port, bool enableSSL, string userName, string password)
    {
        this.host = host;
        this.port = port;
        this.enableSSL = enableSSL;
        this.userName = userName;
        this.password = password;
    }

    public Task SendEmailAsync(string email, string subject, string htmlMessage)
    {
        var client = new SmtpClient(host, port)
        {
            Credentials = new NetworkCredential(userName, password),
            EnableSsl = enableSSL
        };
        return client.SendMailAsync(
            new MailMessage(userName, email, subject, htmlMessage) { IsBodyHtml = true }
        );
    }
}

有人能帮我吗?

邮件。收件人的类型如下。这意味着您可以使用
Add
方法添加多个收件人

MailMessage message = new MailMessage();
message.To.Add(new MailAddress("email1@evilcorp.com"));
message.To.Add(new MailAddress("email2@evilcorp.com"));

事实上我是用另一种方式做的。我会把它贴在这里,它会对某人有所帮助

  • 我创建了一个名为“IExtendemailSender”的新接口,继承了“IEmailSender”接口

     public interface IExtendedEmailSender : IEmailSender
     {
    
     }
    
    public class EmailSender : IExtendedEmailSender
    {
        private string host;
        private int port;
        private bool enableSSL;
        private string userName;
        private string password;
    
        public EmailSender(string host, int port, bool enableSSL, string userName, 
        string password)
        {
            this.host = host;
            this.port = port;
            this.enableSSL = enableSSL;
            this.userName = userName;
            this.password = password;
        }
    
    
        public Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            var client = new SmtpClient(host, port)
            {
                Credentials = new NetworkCredential(userName, password),
                EnableSsl = enableSSL
            };
            return client.SendMailAsync(
                new MailMessage(userName, email, subject, htmlMessage) { IsBodyHtml = 
            true }
            );
        }
    
    
        public Task SendBulkEmailAsync(string[] emails, string subject, string 
          htmlMessage)
        {
            var client = new SmtpClient(host, port)
            {
                Credentials = new NetworkCredential(userName, password),
                EnableSsl = enableSSL
            };
    
            MailMessage mailMessage = new MailMessage();
            mailMessage.Body = htmlMessage;
            mailMessage.IsBodyHtml = true;
            mailMessage.Subject = subject;
    
            foreach (string emailAdress in emails)
            {
                if (CheckIsValiedEmailAddress(emailAdress))
                   mailMessage.To.Add(emailAdress);
            }
    
    
            return client.SendMailAsync(mailMessage); ;
        }
    }
    
  • 为向多个接收者发送电子邮件创建新的抽象方法

    public interface IExtendedEmailSender : IEmailSender
    {
        Task SendBulkEmailAsync(string[] emails, string subject, string htmlMessage);
    }
    
  • 为检查邮件地址创建新方法

    public static bool CheckIsValiedEmailAddress(string address)
    {
        try
        {
            var addr = new System.Net.Mail.MailAddress(address);
            return addr.Address == address;
        }
        catch
        {
            return false;
        }
    }
    
  • 创建调用“EmailSender”的新类并实现“IExtendeMailSender”接口

     public interface IExtendedEmailSender : IEmailSender
     {
    
     }
    
    public class EmailSender : IExtendedEmailSender
    {
        private string host;
        private int port;
        private bool enableSSL;
        private string userName;
        private string password;
    
        public EmailSender(string host, int port, bool enableSSL, string userName, 
        string password)
        {
            this.host = host;
            this.port = port;
            this.enableSSL = enableSSL;
            this.userName = userName;
            this.password = password;
        }
    
    
        public Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            var client = new SmtpClient(host, port)
            {
                Credentials = new NetworkCredential(userName, password),
                EnableSsl = enableSSL
            };
            return client.SendMailAsync(
                new MailMessage(userName, email, subject, htmlMessage) { IsBodyHtml = 
            true }
            );
        }
    
    
        public Task SendBulkEmailAsync(string[] emails, string subject, string 
          htmlMessage)
        {
            var client = new SmtpClient(host, port)
            {
                Credentials = new NetworkCredential(userName, password),
                EnableSsl = enableSSL
            };
    
            MailMessage mailMessage = new MailMessage();
            mailMessage.Body = htmlMessage;
            mailMessage.IsBodyHtml = true;
            mailMessage.Subject = subject;
    
            foreach (string emailAdress in emails)
            {
                if (CheckIsValiedEmailAddress(emailAdress))
                   mailMessage.To.Add(emailAdress);
            }
    
    
            return client.SendMailAsync(mailMessage); ;
        }
    }
    
  • 最后,“IEmailSender”的所有实例都替换为“IExtendemailSender”

  • if(email!=null&&!string.IsNullOrEmpty(email.Trim())
    {
    var lst=新列表(
    (email+“”)。拆分(“;”)。选择(tag=>tag.Trim())。其中(tag=>!string.IsNullOrEmpty(tag));
    foreach(lst中的var s)
    msg.AddTo(s);
    }
    
    MailMessage的
    To
    字段是一个集合。请参见此处:您无法向其中添加多个MailAddress。如何将MailMessage集合传递给SendEmailAsync方法?如何将MailAddressCollection传递给SendEmailAsync方法?您不需要。您将邮件消息传递给SendEmailAsync方法,明白了。谢谢