如何使用 System.Net.Mail 向多个地址发送电子邮件

Posted

技术标签:

【中文标题】如何使用 System.Net.Mail 向多个地址发送电子邮件【英文标题】:How to send email to multiple address using System.Net.Mail 【发布时间】:2011-11-21 20:59:05 【问题描述】:

我有 smtp 电子邮件功能。它适用于单个地址,但在多个地址中存在问题。

我正在使用以下代码行传递多个地址。

MailAddress to = new MailAddress("abc@gmail.com,xyz@gmail.com");

请让我知道问题,因为我没有收到任何错误。

【问题讨论】:

【参考方案1】:
 string[] MultiEmails = email.Split(',');
 foreach (string ToEmail in MultiEmails)
 
    message.To.Add(new MailAddress(ToEmail)); //adding multiple email addresses
 

【讨论】:

【参考方案2】:

我用的是“for”运算符。

try

    string s = textBox2.Text;
    string[] f = s.Split(',');

    for (int i = 0; i < f.Length; i++)
    
        MailMessage message = new MailMessage(); // Create instance of message
        message.To.Add(f[i]); // Add receiver
        message.From = new System.Net.Mail.MailAddress(c);// Set sender .In this case the same as the username
        message.Subject = label3.Text; // Set subject
        message.Body = richTextBox1.Text; // Set body of message
        client.Send(message); // Send the message
        message = null; // Clean up
    



catch (Exception ex)


    MessageBox.Show(ex.Message);

【讨论】:

【参考方案3】:

我认为您可以使用此代码来获得具有显示名称的传出地址列表(也不同):

//1.The ACCOUNT
MailAddress fromAddress = new MailAddress("myaccount@myaccount.com", "my display name");
String fromPassword = "password";

//2.The Destination email Addresses
MailAddressCollection TO_addressList = new MailAddressCollection();

//3.Prepare the Destination email Addresses list
foreach (var curr_address in mailto.Split(new [] ";", StringSplitOptions.RemoveEmptyEntries))

    MailAddress mytoAddress = new MailAddress(curr_address, "Custom display name");
    TO_addressList.Add(mytoAddress);


//4.The Email Body Message
String body = bodymsg;

//5.Prepare GMAIL SMTP: with SSL on port 587
var smtp = new SmtpClient

    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 30000
;


//6.Complete the message and SEND the email:
using (var message = new MailMessage()
        
            From = fromAddress,
            Subject = subject,
            Body = body,
        )

    message.To.Add(TO_addressList.ToString());
    smtp.Send(message);

【讨论】:

【参考方案4】:

试试这个..

using System;
using System.Net.Mail;

public class Test

    public static void Main()
    
        SmtpClient client = new SmtpClient("smtphost", 25);
        MailMessage msg = new MailMessage("x@y.com", "a@b.com,c@d.com");
        msg.Subject = "sdfdsf";
        msg.Body = "sdfsdfdsfd";
        client.UseDefaultCredentials = true;
        client.Send(msg);
    

【讨论】:

【参考方案5】:

我解决这个问题的代码:

private void sendMail()
   
    //This list can be a parameter of metothd
    List<MailAddress> lst = new List<MailAddress>();

    lst.Add(new MailAddress("mouse@xxxx.com"));
    lst.Add(new MailAddress("duck@xxxx.com"));
    lst.Add(new MailAddress("goose@xxxx.com"));
    lst.Add(new MailAddress("wolf@xxxx.com"));


    try
    


        MailMessage objeto_mail = new MailMessage();
        SmtpClient client = new SmtpClient();
        client.Port = 25;
        client.Host = "10.15.130.28"; //or SMTP name
        client.Timeout = 10000;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential("from@email.com", "password");
        objeto_mail.From = new MailAddress("from@email.com");

        //add each email adress
        foreach (MailAddress m in lst)
        
            objeto_mail.To.Add(m);
        


        objeto_mail.Subject = "Sending mail test";
        objeto_mail.Body = "Functional test for automatic mail :-)";
        client.Send(objeto_mail);


    
    catch (Exception ex)
    
        MessageBox.Show(ex.Message);
    

【讨论】:

发送后请务必处理掉objecto_mail。或者使用 Using 块。【参考方案6】:
namespace WebForms.Code.Logging 

    public class ObserverLogToEmail: ILog 
        private string from;
        private string to;
        private string subject;
        private string body;
        private SmtpClient smtpClient;
        private MailMessage mailMessage;
        private MailPriority mailPriority;
        private MailAddressCollection mailAddressCollection;
        private MailAddress fromMailAddress, toMailAddress;
        public MailAddressCollection toMailAddressCollection 
            get;
            set;
        
        public MailAddressCollection ccMailAddressCollection 
            get;
            set;
        
        public MailAddressCollection bccMailAddressCollection 
            get;
            set;
        

        public ObserverLogToEmail(string from, string to, string subject, string body, SmtpClient smtpClient) 
            this.from = from;
            this.to = to;
            this.subject = subject;
            this.body = body;

            this.smtpClient = smtpClient;
        

        public ObserverLogToEmail(MailAddress fromMailAddress, MailAddress toMailAddress,
        string subject, string content, SmtpClient smtpClient) 
            try 
                this.fromMailAddress = fromMailAddress;
                this.toMailAddress = toMailAddress;
                this.subject = subject;
                this.body = content;

                this.smtpClient = smtpClient;

                mailAddressCollection = new MailAddressCollection();

             catch 
                throw new SmtpException(SmtpStatusCode.CommandNotImplemented);
            
        

        public ObserverLogToEmail(MailAddressCollection fromMailAddressCollection,
        MailAddressCollection toMailAddressCollection,
        string subject, string content, SmtpClient smtpClient) 
            try 
                this.toMailAddressCollection = toMailAddressCollection;
                this.ccMailAddressCollection = ccMailAddressCollection;
                this.subject = subject;
                this.body = content;

                this.smtpClient = smtpClient;

             catch 
                throw new SmtpException(SmtpStatusCode.CommandNotImplemented);
            
        

        public ObserverLogToEmail(MailAddressCollection toMailAddressCollection,
        MailAddressCollection ccMailAddressCollection,
        MailAddressCollection bccMailAddressCollection,
        string subject, string content, SmtpClient smtpClient) 
            try 
                this.toMailAddressCollection = toMailAddressCollection;
                this.ccMailAddressCollection = ccMailAddressCollection;
                this.bccMailAddressCollection = bccMailAddressCollection;

                this.subject = subject;
                this.body = content;

                this.smtpClient = smtpClient;

             catch 
                throw new SmtpException(SmtpStatusCode.CommandNotImplemented);
            
        #region ILog Members

        // sends a log request via email.
        // actual email 'Send' calls are commented out.
        // uncomment if you have the proper email privileges.
        public void Log(object sender, LogEventArgs e) 
            string message = "[" + e.Date.ToString() + "] " + e.SeverityString + ": " + e.Message;
            fromMailAddress = new MailAddress("", "HaNN", System.Text.Encoding.UTF8);
            toMailAddress = new MailAddress("", "XXX", System.Text.Encoding.UTF8);

            mailMessage = new MailMessage(fromMailAddress, toMailAddress);
            mailMessage.Subject = subject;
            mailMessage.Body = body;

            // commented out for now. you need privileges to send email.
            // _smtpClient.Send(from, to, subject, body);
            smtpClient.Send(mailMessage);
        

        public void LogAllEmails(object sender, LogEventArgs e) 
            try 
                string message = "[" + e.Date.ToString() + "] " + e.SeverityString + ": " + e.Message;

                mailMessage = new MailMessage();
                mailMessage.Subject = subject;
                mailMessage.Body = body;

                foreach(MailAddress toMailAddress in toMailAddressCollection) 
                    mailMessage.To.Add(toMailAddress);

                
                foreach(MailAddress ccMailAddress in ccMailAddressCollection) 
                    mailMessage.CC.Add(ccMailAddress);
                
                foreach(MailAddress bccMailAddress in bccMailAddressCollection) 
                    mailMessage.Bcc.Add(bccMailAddress);
                
                if (smtpClient == null) 
                    var smtp = new SmtpClient 
                        Host = "smtp.gmail.com",
                        Port = 587,
                        EnableSsl = true,
                        DeliveryMethod = SmtpDeliveryMethod.Network,
                        Credentials = new NetworkCredential("yourEmailAddress", "yourPassword"),
                        Timeout = 30000
                    ;
                 else smtpClient.SendAsync(mailMessage, null);
             catch (Exception) 

                throw;
            
        
    

【讨论】:

【参考方案7】:
MailAddress fromAddress = new MailAddress  (fromMail,fromName);
MailAddress toAddress = new MailAddress(toMail,toName);
MailMessage message = new MailMessage(fromAddress,toAddress);
message.Subject = subject;
message.Body = body;
SmtpClient smtp = new SmtpClient()

    Host = host, Port = port,
    enabHost = "smtp.gmail.com",
    Port = 25,
    EnableSsl = true,
    UseDefaultCredentials = true,
    Credentials = new  NetworkCredentials (fromMail, password)
;
smtp.send(message);

【讨论】:

请更好地格式化您的代码,并在发布前尝试编译它。这个new SmtpClient() enabHost = "smtp.gmail.com", 不会编译。发布一个可以编译的代码。【参考方案8】:

StewieFG 的建议是有效的,但如果您想添加收件人名称,请使用此名称,Marco 在上面发布的内容是电子邮件地址第一,显示名称第二:

msg.To.Add(new MailAddress("your@email1.com","Your name 1"));
msg.To.Add(new MailAddress("your@email2.com","Your name 2"));

【讨论】:

【参考方案9】:
MailMessage msg = new MailMessage();
msg.Body = ....;
msg.To.Add(...);
msg.To.Add(...);

SmtpClient smtp = new SmtpClient();
smtp.Send(msg);

ToMailAddressCollection,所以你可以添加你需要的地址。

如果您需要显示名称,请尝试以下操作:

MailAddress to = new MailAddress(
    String.Format("0 <1>",display_name, address));

【讨论】:

@Denish: 使用msg.From 属性...有什么问题? ;) 实际上我有逗号分隔的收件人地址列表。所以这个问题的另一个答案是合适的,但我找不到任何方法来分配来自地址的显示名称。 您不需要单独添加每个收件人。 msg.To.Add("abc@gmail.com,xyz@gmail.com"); 工作正常。 有人知道ToCC 可以包含多少个地址吗?我在 MSDN 上找不到任何信息...

以上是关于如何使用 System.Net.Mail 向多个地址发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

C#使用 System.Net.Mail发送邮件功能

如何使用 System.Net.Mail 设置退回地址?

如何在没有硬编码 NetworkCredentials 的情况下使用 System.Net.Mail?

如何使用 System.NET.mail 发送带有附件但没有任何纯文本正文的电子邮件?

作为 System.Net.Mail 的附件的流是 0 字节

.NET 发送电子邮件的最佳方法(System.Net.Mail 有问题)