2010-07-09 35 views
20

Tôi đang sử dụng mã bên dưới và nó chỉ gửi một email - Tôi phải gửi email tới nhiều địa chỉ.Không thể gửi email đến nhiều địa chỉ/người nhận bằng C#

Để nhận được nhiều hơn một email tôi sử dụng:

string connectionString = ConfigurationManager.ConnectionStrings["email_data"].ConnectionString; 
OleDbConnection con100 = new OleDbConnection(connectionString); 
OleDbCommand cmd100 = new OleDbCommand("select top 3 emails from bulk_tbl", con100); 
OleDbDataAdapter da100 = new OleDbDataAdapter(cmd100); 
DataSet ds100 = new DataSet(); 
da100.Fill(ds100); 

    for (int i = 0; i < ds100.Tables[0].Rows.Count; i++) 
    //try 
    { 
     string all_emails = ds100.Tables[0].Rows[i][0].ToString(); 
     { 
      string allmail = all_emails + ";"; 
      Session.Add("ad_emails",allmail); 
      Response.Write(Session["ad_emails"]); 
      send_mail(); 
     } 
    } 

và gửi email tôi sử dụng:

string sendto = Session["ad_emails"].ToString(); 

MailMessage message = new MailMessage("[email protected]", sendto, "subject", "body"); 
SmtpClient emailClient = new SmtpClient("mail.smtp.com"); 
System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("abc", "abc"); 
emailClient.UseDefaultCredentials = true; 
emailClient.Credentials = SMTPUserInfo; 
emailClient.Send(message); 
+1

Câu hỏi là gì? –

+0

Vui lòng kiểm tra mã được đăng tại đây. Khi tôi định dạng lại nó, tôi tìm thấy một tập hợp bổ sung '{}'. Tôi không nghĩ rằng đó là cố ý vì vậy tôi đã loại bỏ chúng. Chỉ cần nhấp vào liên kết chỉnh sửa ở trên nếu bạn muốn đưa họ trở lại. –

+0

Đặt một, để tách các email khác nhau và tạo một đối tượng MailAddress sẽ không hoạt động! Kiểm tra giải pháp này: http://stackoverflow.com/questions/7498968/how-to-send-email-to-multiple-address-using-system-net-mail – dtakis

Trả lời

59

Vấn đề là bạn đang cung cấp một danh sách các địa chỉ cách nhau bởi bán dấu hai chấm để các nhà xây dựng MailMessage khi nó chỉ mất một chuỗi đại diện cho một địa chỉ duy nhất:

một chuỗi chứa địa chỉ của người nhận tin nhắn e-mail.

hoặc có thể một danh sách được phân tách bằng dấu phẩy (xem bên dưới).

Source

Để xác định nhiều địa chỉ bạn cần phải sử dụng To tài sản mà là một MailAddressCollection, mặc dù các ví dụ trên các trang này không hiển thị nó rất rõ ràng:

message.To.Add("[email protected], [email protected]")); 

Các e địa chỉ email để thêm vào phần tử MailAddressCollection. Nhiều địa chỉ e-mail phải được phân tách bằng ký tự dấu phẩy (",").

MSDN page

để tạo MailMessage với một danh sách dấu phẩy tách ra nên làm việc.

+4

yep, địa chỉ được phân cách bằng dấu phẩy hoạt động – Andrew

+1

Bạn có đầy đủ không ví dụ từ chức năng này? –

8

Đây là những gì phù hợp với tôi. (người nhận là một mảng của Strings)

//Fuse all Receivers 
var allRecipients = String.Join(",", recipients); 

//Create new mail 
var mail = new MailMessage(sender, allRecipients, subject, body); 

//Create new SmtpClient 
var smtpClient = new SmtpClient(hostname, port); 

//Try Sending The mail 
try 
{ 
    smtpClient.Send(mail); 
} 
catch (Exception ex) 
{ 
    Log.Error(String.Format("MailAppointment: Could Not Send Mail. Error = {0}",ex), this); 
    return false; 
} 
6

Chức năng này xác nhận một danh sách dấu phẩy- hoặc dấu chấm phẩy để phân tách giữa các địa chỉ email:

public static bool IsValidEmailString(string emailAddresses) 
{ 
    try 
    { 
     var addresses = emailAddresses.Split(',', ';') 
      .Where(a => !string.IsNullOrWhiteSpace(a)) 
      .ToArray(); 

     var reformattedAddresses = string.Join(",", addresses); 

     var dummyMessage = new System.Net.Mail.MailMessage(); 
     dummyMessage.To.Add(reformattedAddresses); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
+0

Điều này sẽ cần phải có .Where (a =>! String.IsNullOrEmpty (a)). ToArray(); thay vì –

+1

Cảm ơn bạn đã nắm bắt. Tôi đã cập nhật mã, mặc dù tôi sử dụng hàm .NET 4.0 'IsNullOrWhiteSpace' – Matt

4

Để gửi tới nhiều người để tôi thiết lập chuỗi nhận của tôi với dấu phẩy làm dấu phân cách của tôi.

string recipient = "[email protected],[email protected],[email protected]"; 

Sau đó, để thêm người nhận cho các đối tượng MailMessage:

string[] emailTo = recipient.Split(','); 
for (int i = 0; i < emailTo.GetLength(0); i++) 
    mailMessageObject.To.Add(emailTo[i]); 
0

Mã này tôi sử dụng cho nhiều email gửi cho để, bcc và cc

MailMessage email = new MailMessage(); 
Attachment a = new Attachment(attach); 
email.From = new MailAddress(from);//De 
string[] Direcciones; 
char[] deliminadores = { ';' }; 

//Seleccion de direcciones para el parametro to 
Direcciones = to.Split(deliminadores); 
foreach (string d in Direcciones) 
email.To.Add(new MailAddress(d));//Para 

//Seleccion de direcciones para el parametro CC 
Direcciones = CC.Split(deliminadores); 
foreach (string d in Direcciones) 
email.CC.Add(new MailAddress(d)); 

//Seleccion de direcciones para el parametro Bcc 
Direcciones = Bcc.Split(deliminadores); 
foreach (string d in Direcciones) 
enter code here`email.Bcc.Add(new MailAddress(d)); 
Các vấn đề liên quan