MailMessage के साथ कई प्राप्तकर्ता को ईमेल भेजें?


85

मेरे पास SQL ​​सर्वर में कई ईमेल प्राप्तकर्ता हैं। जब मैं वेबपेज में सेंड पर क्लिक करता हूं तो उसे सभी प्राप्तकर्ताओं को ईमेल भेजना चाहिए। मैंने ईमेल का उपयोग करके अलग कर दिया है ;

निम्नलिखित एकल प्राप्तकर्ता कोड है।

MailMessage Msg = new MailMessage();
MailAddress fromMail = new MailAddress(fromEmail);
Msg.From = fromMail;
Msg.To.Add(new MailAddress(toEmail));

if (ccEmail != "" && bccEmail != "")
{
    Msg.CC.Add(new MailAddress(ccEmail));
    Msg.Bcc.Add(new MailAddress(bccEmail));
}

SmtpClient a = new SmtpClient("smtp server name");
a.Send(Msg);
sreader.Dispose();

आपने अब तक क्या प्रयास किया है? क्या आपके पास एकल प्राप्तकर्ता के लिए यह काम है?
ब्रेंडन ग्रीन

@ ब्रेंडनग्रीन हाँ मैं एकल प्राप्तकर्ता के लिए काम कर रहा हूँ।
चेतन गोयनका

5
इसके अलावा, FYI करें, आपके MailMessageऔर SmtpClientउदाहरणों को usingब्लॉक में होना चाहिए ।
जॉन सॉन्डर्स

2
@ जॉनसनर्स उन्हें चाहिए, लेकिन निश्चित रूप से करने की आवश्यकता नहीं है
न्यूम लॉक

1
@ जॉनसनंदर्स सबसे पहले, आपका शब्दांकन बहुत ही भ्रामक है: आप शायद इस पर बहस करेंगे, लेकिन " usingब्लॉक में रहने की जरूरत नहीं है" को " निपटाने की जरूरत नहीं है"। दूसरा, वेब अनुप्रयोगों जैसे उत्पादन कोड में आप आमतौर पर SendAsyncवैसे भी उपयोग करना चाहते हैं , जो SnmpClientउदाहरण के निपटान के लिए बिना आवश्यकता के काम करता है ।
नंबर लॉक

जवाबों:


178

आसान!

बस आने वाली पते की सूची को ";" पर विभाजित करें चरित्र, और उन्हें मेल संदेश में जोड़ें:

foreach (var address in addresses.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries))
{
    mailMessage.To.Add(address);    
}

इस उदाहरण में, addresses" address1@example.com;address2@example.com" शामिल है।


56
मुझे पार्टी के लिए देर हो रही है लेकिन MailMessage (स्ट्रिंग से, स्ट्रिंग) कंस्ट्रक्टर पते के अल्पविराम से अलग की गई सूची को स्वीकार करता है। तो, आप कुछ नया कर सकते थे जैसे कि MailMessage (fromMail, address.replace (";", ",",)) हो सकता है कि प्रतिस्थापन का उपयोग करना बेहतर न हो, लेकिन मुझे ऐसा लगता है कि मुझे यह टिप्पणी करनी चाहिए कि अन्य लोग पहले ही अलग हो चुके हैं। तार! फिर बंटवारे या प्रतिस्थापन की कोई आवश्यकता नहीं होगी।
21

@ एरेक्स, यदि आप ब्रेंडन के समान नमूना कोड की एक पंक्ति को एक साथ रख सकते हैं, तो आपको निश्चित रूप से उत्तर के रूप में जोड़ना चाहिए।
एडम मिलर

@ इस टिप्पणी के लिए धन्यवाद, मैं पहले से ही आदतों को विभाजित कर रहा था जब तक कि मैं आपकी टिप्पणी नहीं पढ़ता। यह वही है जो मैं चाहता हूँ!
जीरो

क्या यह आवश्यक है? क्या आप न सिर्फ स्ट्रिंग को पहले से ही कई पते के लिए स्वरूपित कर रहे हैं और उन्हें विभाजित कर रहे हैं, फिर उन्हें पुन: असाइन कर रहे हैं? यदि आप To () a string as उल्लेखित To ("a1; a2; a3") भेजते हैं, तो आपको उन्हें अलग करने और फिर व्यक्तिगत रूप से असाइन करने की आवश्यकता क्यों है? चूंकि यह AddressCollection या एक deliminator स्ट्रिंग में कई पते स्वीकार करता है।
केसी

82

जैसा कि टिप्पणियों में एडम मिलर ने सुझाव दिया है, मैं एक और समाधान जोड़ूंगा।

MailMessage (स्ट्रिंग से, स्ट्रिंग से) कंस्ट्रक्टर पते के अल्पविराम से अलग की गई सूची को स्वीकार करता है। इसलिए यदि आप पहले से ही एक अल्पविराम (',') अलग सूची में हैं, तो उपयोग उतना ही सरल है:

MailMessage Msg = new MailMessage(fromMail, addresses);

इस विशेष मामले में, हम ';' की जगह ले सकते हैं। ',' के लिए और अभी भी कंस्ट्रक्टर का उपयोग करें।

MailMessage Msg = new MailMessage(fromMail, addresses.replace(";", ","));

चाहे आप इसे पसंद करते हैं या स्वीकृत उत्तर आपके ऊपर है। यकीनन लूप इरादे को साफ करता है, लेकिन यह छोटा है और अस्पष्ट नहीं है। लेकिन क्या आपके पास पहले से एक अल्पविराम से अलग की गई सूची होनी चाहिए, मुझे लगता है कि यह जाने का रास्ता है।


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

1
मेरी समझ के लिए अगर वहाँ उसके बाद कुछ नहीं है, तो एक अल्पविराम अल्पविराम / अर्धविराम नहीं होना चाहिए ... लेकिन निश्चित रूप से एक अच्छी टिप्पणी है ताकि इसे पढ़ने वाले लोग इसके बारे में जागरूक हों। धन्यवाद!
Areks

1
क्या यह कहीं दस्तावेज है? कंस्ट्रक्टर डॉक्स सिर्फ toपरम को "एक स्ट्रिंग जिसमें ई-मेल संदेश के प्राप्तकर्ता का पता शामिल है" के रूप में वर्णित करता है । मैं इसका उपयोग करना चाहता हूं लेकिन नहीं अगर इसका समर्थन हटाया जा सकता है।
xr280xr

1
अफसोस की बात है कि यह प्रारूप प्रलेखित नहीं है, लेकिन निर्माणकर्ता यह बताता है कि यह एक से अधिक प्राप्तकर्ता के लिए हो सकता है: msdn.microsoft.com/en-us/library/14k9fb7t(v=vs.110).aspx ए स्ट्रिंग जिसमें पते शामिल हैं ई-मेल संदेश के प्राप्तकर्ताओं की। यह "पते" और "प्राप्तकर्ता" दोनों के लिए बहुवचन है।
Areks

1
निश्चित रूप से एक विशेषता है, लेकिन प्रलेखन या तो विरल है या कोई नहीं है। मुझे लगभग 5 विधि कॉल के माध्यम से जाना था, केवल यह संकेत देने के लिए कि यह सच है। referencesource.microsoft.com/#System/net/System/Net/mail/...
Sinjai

1

दस्तावेज़ के अनुसार:

MailMessage.To property - रिटर्न MailAddressCollection जिसमें इस ईमेल संदेश के प्राप्तकर्ताओं की सूची है

यहाँ MailAddressCollection नामक एक अंतर्निहित पद्धति है

   public void Add(string addresses)

   1. Summary:
          Add a list of email addresses to the collection.

   2. Parameters:
          addresses: 
                *The email addresses to add to the System.Net.Mail.MailAddressCollection. Multiple
                *email addresses must be separated with a comma character (",").     

इसलिए कई प्राप्तकर्ताओं के मामले में आवश्यकता: एक स्ट्रिंग पास करें जिसमें अल्पविराम द्वारा अलग किए गए ईमेल पते हों

आपके मामले में :

बस सभी की जगह; साथ में ,

Msg.To.Add(toEmail.replace(";", ","));

सन्दर्भ के लिए :

  1. https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailmessage?view=netframework-4.8
  2. https://www.geeksforgeeks.org/c-sharp-replace-method/

-4

मैंने निम्नलिखित पॉवरशेल स्क्रिप्ट का उपयोग करके और पते के बीच () का उपयोग करके यह परीक्षण किया है। यह मेरे लिए काम किया!

$EmailFrom = "<from@any.com>";
$EmailPassword = "<password>";
$EmailTo = "<to1@any.com>,<to2@any.com>";
$SMTPServer = "<smtp.server.com>";
$SMTPPort = <port>;
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer,$SMTPPort);
$SMTPClient.EnableSsl = $true;
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom, $EmailPassword);
$Subject = "Notification from XYZ";
$Body = "this is a notification from XYZ Notifications..";
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body);

4
यह एक सवाल है C#, जो
पावरशेल

अंत में एक ही पुस्तकालय। इसके बिना मशीन पर पावरशेल का उपयोग करके परीक्षण करना आसान नहीं है। बनाम जब आपको यह अधिकार हो जाता है कि आपको पॉवरसेल की स्क्रिप्ट काम कर रही है तो यह c # समतुल्य "अनुवाद" की बात है।
हेक्टर मार्कोस

1
यह सवाल .NET Frameworkकेवल टैग नहीं किया गया है C#। यदि हर कोई आपके जैसा ही कर रहा है, तो हमारे पास VB.NET, F # या C ++ से संबंधित सभी प्रश्नों के उत्तर भी होंगे .NET Framework। आखिरकार यह एक ही फ्रेमवर्क है, यह केवल अनुवाद की बात है ... आप यहां मेरी बात देखते हैं? StackOverflow सूचना का वास्तव में कचरा स्रोत बन जाएगा
Jérôme MEVEL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.