2010-03-08 17 views
33

संपादित करें: लाल प्रश्नों में एक अभ्यास के अलावा, यह प्रश्न व्यर्थ है। यह मुद्दा मेरी मूर्खता का संयोजन बन गया (कोई भी ईमेल नहीं किया जा रहा था क्योंकि मेजबान को निर्दिष्ट नहीं किया जा रहा था और web.config में गलत था) और उपयोगकर्ता मुझे बता रहे थे कि उन्हें कभी-कभी ईमेल मिलते हैं और कभी-कभी नहीं होते हकीकत में वे कभी ईमेल प्राप्त नहीं कर रहे थे।.Net System.Mail.Message कई "टू" पते जोड़ना

तो, नियंत्रित सेटिंग में समस्या को पुन: उत्पन्न करने के लिए उचित कदम उठाने के बजाय, मैंने उपयोगकर्ता की जानकारी और "यह मेरी मशीन पर काम करता है" मानसिकता पर भरोसा किया। खुद को और किसी और के लिए अच्छा अनुस्मारक जो कभी-कभी मूर्ख होता है।


मैं सिर्फ कुछ मुझे लगता है कि असंगत है मारा, और अगर मैं कुछ गलत कर रहा हूँ देखने के लिए, अगर मैं एक बेवकूफ हूँ, या चाहता था ...

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

सच ही भेजता है यह ईमेल 1 व्यक्ति, अंतिम व्यक्ति को।

गुणकों मैं यह करने के लिए है जोड़ने के लिए:

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

मैं इसे नहीं मिलता है। मैंने सोचा कि मैं To पता संग्रह में कई लोगों को जोड़ रहा था, लेकिन मैं जो कर रहा था उसे बदल रहा था।

मुझे लगता है कि मैं सिर्फ अपनी त्रुटि का एहसास (-) नई MailAddress ("[email protected]")

संग्रह करने के लिए एक आइटम जोड़ने के लिए, .To.Add का उपयोग आप सिर्फ एक string का उपयोग करते हैं , यह अपनी सूची में जो कुछ भी था उसे बदल देता है। संपादित करें: अन्य लोगों ने परीक्षण किया है और इस व्यवहार को नहीं देख रहे हैं। यह या तो ढांचे के मेरे विशेष संस्करण में एक बग है, या अधिक संभावना है, मेरे द्वारा बेवकूफ चालक।

उह। मैं इसे एक बड़ा बड़ा गचाचा मानता हूँ! चूंकि मैंने अपने स्वयं के प्रश्न का उत्तर दिया, लेकिन मुझे लगता है कि स्टैक ओवरफ्लो संग्रह में यह मूल्य है, मैं अभी भी यह पूछूंगा। हो सकता है कि किसी को भी अन्य जाल का विचार हो जिसे आप गिर सकते हैं।

+0

खुशी है कि आपने अपना स्वयं का उत्तर देने का सवाल छोड़ने का फैसला किया है। यह एक अजीब घटना है। – DOK

+0

क्या आपकी समस्या यह है कि यह केवल * अंतिम * भेजती है या आपका संग्रह मूल्यों को ओवरराइट कर रहा है? एफडब्ल्यूआईडब्लू, एक .Net 2.0 कंसोल ऐप में, यह अपेक्षित व्यवहार करता है (संग्रह में 4 पते)। –

+0

पुन: उत्पन्न नहीं कर सकता है। – SLaks

उत्तर

30

मैं अपने बग को दोहराने के लिए सक्षम नहीं था:

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); 

डम्पिंग MailAddressCollection: करने के लिए की सामग्री

MailAddressCollection (2 आइटम)
DisplayName उपयोग आर होस्ट पता

उपयोगकर्ता example.com [email protected]
उपयोगकर्ता 2 example.com user2 @ उदाहरण।कॉम

और जिसके परिणामस्वरूप ई-मेल के रूप में 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 

आप कुछ अन्य मुद्दा अपने कोड या एसएमटीपी सर्वर के साथ चल रहा है नहीं है यकीन है?

+0

+1 न तो मैं कर सकता हूं। – SLaks

+0

मैं आपके साथ हूं। मैं इसे पुन: उत्पन्न नहीं कर सकता। –

+0

हमम। अभी मेल सर्वर रखरखाव के लिए नीचे है, इसलिए मुझे पता नहीं है कि मैं परीक्षण कर सकता हूं। हालांकि, मैं बहुत सावधान था, और जिस कोड का मैं उपयोग कर रहा था वह बहुत आसान था। लेकिन, आप लोगों ने अपना खुद का परीक्षण चलाने के लिए समय निकाला, और कई लोग। मैं अभी भी यह देखने के लिए अपने कोड को देख रहा हूं कि क्या कुछ और चल रहा है या नहीं। अन्यथा, मुझे सर्वर को जांचने के लिए कुछ इंजीनियर को बताना होगा। –

3

कई सिस्टम जोड़ें। मेलएड्रेस ऑब्जेक्ट जो आप चाहते हैं उसे पाने के लिए।

7

आप इस या तो कई के साथ System.Net.Mail.MailAddress वस्तुओं क्या कर सकते हैं या आप पतों अल्पविराम के द्वारा अलग के सभी वाली एकल स्ट्रिंग प्रदान कर सकते हैं

4

आप अल्पविराम से अलग किए स्ट्रिंग ("[email protected], [email protected]") में ई-मेल डालने की कोशिश कर सकते:

सी #:

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

VB.NET यदि आप रुचि रखते हैं:

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

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

मुझे लगता है कि अगर मैं इस मार्ग पर जाता हूं तो यह चाहता है कि ईमेल अल्पविराम से अलग हो। लेकिन फिर यह मुझे सीमित करता है कि मैं "उपयोगकर्ता के अनुकूल" ईमेल नाम नहीं डाल सकता। जैसा कि हम इसे कई साल पहले " [email protected]" प्रकार के निर्माण के साथ करते थे। हो सकता है कि मेरे पास पीछे की ओर है, मैं अब भूल गया हूं ... –

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

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

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

अब आप इसे

जैसे उपयोग कर सकते हैं पतों में 210
var mailMessage = new MailMessage(); 
mailMessage.To.Add(FormatMultipleEmailAddresses("[email protected];[email protected],[email protected]")); 
+0

यदि रिक्त स्थान को अलग करने की अनुमति देना चाहते हैं तो इसका उपयोग करें: var delimiters = new [] {',', ';', ''}; –

0

इस बारे में मैं आप के रूप में ही यह सोच कर कि वे संग्रह के अंत में जोड़ दिए जाते हैं चाहते हैं तार जोड़ने के लिए था खोलना के लिए धन्यवाद। ऐसा प्रतीत होता है पैरामीटर हैं:

msg.to.Add (<MailAddress>) संग्रह
msg.to.Add (< स्ट्रिंग >) के अंत तक MailAddress कहते संग्रह करने के लिए ईमेल की सूची जोड़ने के

परम प्रकार के आधार पर थोड़ा अलग क्रियाएं, मुझे लगता है कि यह बहुत खराब रूप है, मैंने कुछ अलग-अलग स्प्लिट विधियों को जोड़ दिया होगा।

-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); 
     } 

    } 
}`` 
संबंधित मुद्दे