如何使用 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);
To
是MailAddressCollection
,所以你可以添加你需要的地址。
如果您需要显示名称,请尝试以下操作:
MailAddress to = new MailAddress(
String.Format("0 <1>",display_name, address));
【讨论】:
@Denish: 使用msg.From
属性...有什么问题? ;)
实际上我有逗号分隔的收件人地址列表。所以这个问题的另一个答案是合适的,但我找不到任何方法来分配来自地址的显示名称。
您不需要单独添加每个收件人。 msg.To.Add("abc@gmail.com,xyz@gmail.com");
工作正常。
有人知道To
和CC
可以包含多少个地址吗?我在 MSDN 上找不到任何信息...以上是关于如何使用 System.Net.Mail 向多个地址发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有硬编码 NetworkCredentials 的情况下使用 System.Net.Mail?
如何使用 System.NET.mail 发送带有附件但没有任何纯文本正文的电子邮件?