2010-03-08 23 views
33

CHỈNH SỬA: Câu hỏi này là vô nghĩa, ngoại trừ việc tập thể dục trong cá trích đỏ. Vấn đề hóa ra lại là sự kết hợp giữa sự ngu ngốc của tôi (NO ONE đã được gửi qua email vì máy chủ không được chỉ định và không chính xác trong web.config) và người dùng nói với tôi rằng đôi khi họ nhận được email và đôi khi không, khi trong thực tế họ KHÔNG BAO GIỜ nhận được email..Net System.Mail.Message thêm nhiều địa chỉ "Tới"

Vì vậy, thay vì thực hiện các bước thích hợp để tái tạo sự cố trong cài đặt được kiểm soát, tôi dựa vào thông tin người dùng và tâm trạng "hoạt động trên máy của tôi". Lời nhắc nhở tốt cho bản thân tôi và bất cứ ai khác ngoài kia đôi khi là một thằng ngốc.


Tôi chỉ cần nhấn một cái gì đó tôi nghĩ là không phù hợp, và muốn xem tôi đang làm điều gì sai, nếu tôi là một thằng ngốc, hoặc ...

MailMessage msg = new MailMessage(); 
msg.To.Add("[email protected]"); 
msg.To.Add("[email protected]"); 
msg.To.Add("[email protected]"); 
msg.To.Add("[email protected]"); 

Thật chỉ gửi email này cho 1 người, người cuối cùng.

Để thêm bội tôi phải làm điều này:

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

Tôi không nhận được nó. Tôi nghĩ rằng tôi đã thêm nhiều người vào bộ sưu tập địa chỉ To, nhưng những gì tôi đang làm đang thay thế nó.

Tôi nghĩ tôi chỉ nhận ra lỗi của tôi - để thêm một mục vào bộ sưu tập, sử dụng .To.Add (MailAddress mới ("[email protected]"))

Nếu bạn sử dụng chỉ là một string , nó thay thế mọi thứ trong danh sách của nó. EDIT: Những người khác đã thử nghiệm và không thấy hành vi này. Đây là một lỗi trong phiên bản cụ thể của khung công tác của tôi, hoặc nhiều khả năng là một hành động ngốc nghếch của tôi.

Ugh. Tôi sẽ xem xét điều này một gotcha khá lớn! Kể từ khi tôi trả lời câu hỏi của riêng tôi, nhưng tôi nghĩ rằng đây là giá trị để có trong kho lưu trữ stackoverflow, tôi vẫn sẽ hỏi nó. Có thể ai đó thậm chí còn có ý tưởng về những cái bẫy khác mà bạn có thể rơi vào.

+0

Vui vì bạn đã quyết định để lại câu hỏi tự trả lời của bạn. Đây là một hiện tượng lạ. – DOK

+0

Vấn đề của bạn là chỉ * gửi * đến người cuối cùng hoặc bộ sưu tập của bạn đang ghi đè các giá trị? FWIW, trong ứng dụng giao diện điều khiển .Net 2.0, ứng dụng này hoạt động như mong đợi (4 địa chỉ trong bộ sưu tập Tới). –

+0

Không thể sao chép. – SLaks

Trả lời

30

tôi đã không thể lặp lại lỗi của bạn:

var message = new MailMessage(); 

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

message.From = new MailAddress("[email protected]"); 
message.Subject = "Test"; 
message.Body = "Test"; 

var client = new SmtpClient("localhost", 25); 
client.Send(message); 

bán phá giá các nội dung của To: MailAddressCollection:

MailAddressCollection (2 bài)
DisplayName Sử dụng r Địa chỉ Máy chủ

user example.com [email protected]
user2 example.com user2 @ example.com

Và kết quả e-mail như đánh bắt bằng smtp4dev:

Received: from mycomputername (mycomputername [127.0.0.1]) 
    by localhost (Eric Daugherty's C# Email Server) 
    3/8/2010 12:50:28 PM 
MIME-Version: 1.0 
From: [email protected] 
To: [email protected], [email protected] 
Date: 8 Mar 2010 12:50:28 -0800 
Subject: Test 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: quoted-printable 

Test 

Bạn có chắc chắn đó không phải một số vấn đề khác xảy ra với mã của bạn hoặc máy chủ SMTP?

+0

+1 Không thể I. – SLaks

+0

Tôi đang ở bên bạn. Tôi không thể tái tạo điều này. –

+0

Hmmm. Ngay bây giờ máy chủ thư đã ngừng hoạt động để bảo trì, vì vậy tôi không biết một máy chủ nào có thể kiểm tra. Tuy nhiên, tôi đã khá cẩn thận, và mã tôi đã sử dụng rất đơn giản. Nhưng, các bạn đã dành thời gian để chạy thử nghiệm của riêng mình và nhiều người. Tôi vẫn đang xem mã của mình để xem có điều gì khác xảy ra không. Nếu không, tôi sẽ phải nói với một số kỹ sư để kiểm tra máy chủ. –

3

Thêm nhiều đối tượng System.MailAdress để nhận được những gì bạn muốn.

7

Bạn có thể làm điều này hoặc với nhiều System.Net.Mail.MailAddress đối tượng hoặc bạn có thể cung cấp một chuỗi duy nhất chứa tất cả các địa chỉ bằng dấu phẩy tách

4

Bạn có thể thử đặt e-mail vào một chuỗi dấu phẩy phân cách ("[email protected], [email protected]"):

C#:

ArrayList arEmails = new ArrayList(); 
arEmails.Add("[email protected]"); 
arEmails.Add("[email protected]"); 
          
string strEmails = string.Join(", ", arEmails); 

VB.NET nếu bạn quan tâm:

Dim arEmails As New ArrayList 
arEmails.Add("[email protected]") 
arEmails.Add("[email protected]") 

Dim strEmails As String = String.Join(", ", arEmails) 
+0

Tôi nghĩ rằng nếu tôi đi tuyến đường này, nó muốn các email được phân tách bằng dấu phẩy. Nhưng điều này sau đó giới hạn tôi ở chỗ tôi không thể đặt tên email "thân thiện với người dùng". Giống như cách chúng tôi sử dụng để làm điều đó năm trước với cấu trúc kiểu " [email protected]". Có lẽ tôi đã quay trở lại, tôi đã quên bây giờ ... –

8
private string FormatMultipleEmailAddresses(string emailAddresses) 
    { 
     var delimiters = new[] { ',', ';' }; 

     var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 

     return string.Join(",", addresses); 
    } 

Bây giờ bạn có thể sử dụng nó như

var mailMessage = new MailMessage(); 
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]")); 
+0

nếu muốn cho phép các không gian để tách các email sử dụng: var delimiters = new [] {',', ';', ''}; –

0

Cảm ơn cho việc tìm kiếm này tôi đã muốn thêm chuỗi suy nghĩ giống như bạn biết rằng họ muốn được thêm vào kết thúc của bộ sưu tập. Dường như params là:

msg.to.Add (<MailAddress>) thêm MailAddress đến cuối của bộ sưu tập
msg.to.Add (< chuỗi >) thêm một danh sách các email đến bộ sưu tập

Hành động hơi khác nhau tùy thuộc vào loại param, tôi nghĩ rằng đây là hình thức khá xấu tôi muốn có phương pháp chia AddStringList của một cái gì đó.

-1
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net.Mail; 
using System.Web; 

namespace HMS.HtmlHelper 
{ 
    public class SendmailHelper 
    { 
     //Created SendEMail method for sendiing mails to users 
     public bool SendEMail(string FromName, string ToAddress, string Subject, string Message) 
     { 
      bool valid =false; 
      try 
      { 
       string smtpUserName = System.Configuration.ConfigurationManager.AppSettings["smtpusername"].ToString(); 
       string smtpPassword = System.Configuration.ConfigurationManager.AppSettings["smtppassword"].ToString(); 
       MailMessage mail = new MailMessage();`` 
       mail.From = new MailAddress(smtpUserName, FromName); 
       mail.Subject = Subject; 
       mail.To.Add(FormatMultipleEmailAddresses(ToAddress)); 
       //mail.To.Add(ToAddress); 
       mail.Body = Message.ToString(); 
       mail.IsBodyHtml = true; 
       SmtpClient smtp = new SmtpClient(); 
       smtp.Port = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["smtpserverport"]); 
       smtp.Host = System.Configuration.ConfigurationManager.AppSettings["SmtpServer"];/
       smtp.Credentials = new System.Net.NetworkCredential(smtpUserName, smtpPassword); 
       smtp.EnableSsl = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["ssl"]); ; 
       smtp.Send(mail); 
       valid = true; 

      } 
      catch (Exception ex) 
      { 
       valid =false ; 
      } 

      return valid; 
     } 



     public string FormatMultipleEmailAddresses(string emailAddresses) 
     { 
      var delimiters = new[] { ',', ';' }; 

      var addresses = emailAddresses.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); 

      return string.Join(",", addresses); 
     } 

    } 
}`` 
Các vấn đề liên quan