2009-01-16 1 views
41

का उपयोग कर ई-मेल भेजना मुझे अपने सी # ऐप के माध्यम से ईमेल भेजने की आवश्यकता है।सी #

मैं एक वीबी 6 पृष्ठभूमि से आया हूं और एमएपीआई नियंत्रण के साथ बहुत सारे बुरे अनुभव हुए हैं। सबसे पहले, एमएपीआई ने HTML ईमेल का समर्थन नहीं किया और दूसरा, सभी ईमेल मेरे डिफ़ॉल्ट मेल आउटबॉक्स पर भेजे गए थे। इसलिए मुझे अभी भी प्राप्त करने पर क्लिक करने की आवश्यकता है।

यदि मुझे थोक HTML कोड ईमेल (100 - 200) भेजने की आवश्यकता है, तो सी # में ऐसा करने का सबसे अच्छा तरीका क्या होगा?

अग्रिम धन्यवाद।

उत्तर

65

आप नेट ढांचे के System.Net.Mail.MailMessage वर्ग इस्तेमाल कर सकते हैं।

आप MSDN documentation here पा सकते हैं।

using System.Net; 
using System.Net.Mail; 
using System.Net.Mime; 

... 
try 
{ 

    SmtpClient mySmtpClient = new SmtpClient("my.smtp.exampleserver.net"); 

    // set smtp-client with basicAuthentication 
    mySmtpClient.UseDefaultCredentials = false; 
    System.Net.NetworkCredential basicAuthenticationInfo = new 
     System.Net.NetworkCredential("username", "password"); 
    mySmtpClient.Credentials = basicAuthenticationInfo; 

    // add from,to mailaddresses 
    MailAddress from = new MailAddress("[email protected]", "TestFromName"); 
    MailAddress to = new MailAddress("[email protected]", "TestToName"); 
    MailMessage myMail = new System.Net.Mail.MailMessage(from, to); 

    // add ReplyTo 
    MailAddress replyto = new MailAddress("[email protected]"); 
    myMail.ReplyToList.Add(replyTo); 

    // set subject and encoding 
    myMail.Subject = "Test message"; 
    myMail.SubjectEncoding = System.Text.Encoding.UTF8; 

    // set body-message and encoding 
    myMail.Body = "<b>Test Mail</b><br>using <b>HTML</b>."; 
    myMail.BodyEncoding = System.Text.Encoding.UTF8; 
    // text or html 
    myMail.IsBodyHtml = true; 

    mySmtpClient.Send(myMail); 
} 

catch (SmtpException ex) 
{ 
    throw new ApplicationException 
    ("SmtpException has occured: " + ex.Message); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 
+1

सीधे कोड में पासवर्ड एम्बेड करने के लिए क्या विकल्प हैं? –

+4

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

+3

आप अपनी कॉन्फ़िगरेशन फ़ाइल में '' के साथ उन सभी को भी कॉन्फ़िगर कर सकते हैं। मैं विकास के दौरान निर्देशिका में मेल भेजने के लिए हर समय इसका उपयोग करता हूं, फिर लाइव होने के लिए तैयार होने पर इसे वास्तविक भेजने के लिए स्विच करता हूं। – dotjoe

4

.NET ढांचे में कुछ अंतर्निहित कक्षाएं हैं जो आपको अपने ऐप के माध्यम से ई-मेल भेजने की अनुमति देती हैं।

आपको System.Net.mail नामस्थान में एक नज़र रखना चाहिए, जहां आपको MailMessage और SmtpClient कक्षाएं मिलेंगी। आप MailMormage क्लास के बॉडीफॉर्मैट को MailFormat.Html पर सेट कर सकते हैं।

यदि आप MailMessage क्लास की वैकल्पिक दृश्यों का उपयोग करते हैं तो यह सहायक भी हो सकता है, ताकि आप अपने मेल का सादा-पाठ संस्करण प्रदान कर सकें, ताकि इसे उन ग्राहकों द्वारा पढ़ा जा सके जो HTML का समर्थन नहीं करते हैं।

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx

+0

मुझे यह करने के लिए मारो :) :) –

+0

कैसे जवाब के आदेश परिभाषित किया गया है? कुछ समय पहले स्प्लेटन का जवाब तीसरा था, अब यह पहला है ... सोचें कि मुझे अक्सर पूछे जाने वाले प्रश्न पढ़ना चाहिए;) (पहली बार यहां के आसपास) –

+0

सबसे पहले स्वीकार किए गए उत्तर, नीचे दिए गए सभी अन्य वोटों द्वारा क्रमबद्ध – edosoft

1

उपयोग नाम स्थान System.Net.Mail:

यहाँ एक सरल उदाहरण (कोड स्निपेट) है। Here is a link to the MSDN page

आप SmtpClient क्लास का उपयोग कर ईमेल भेज सकते हैं।

मैंने कोड नमूना को पारदर्शी किया, इसलिए विवरण के लिए एमएसडीएन चेकआउट करें।

MailMessage message = new MailMessage(
    "[email protected]", 
    "[email protected]", 
    "Subject goes here", 
    "Body goes here"); 

SmtpClient client = new SmtpClient(server); 
client.Send(message); 

कई ईमेल भेजने का सबसे अच्छा तरीका इस तरह कुछ ऐसा करना होगा और भेजना होगा!

+2

भेजने से पहले "message.IsBodyHtml = true" को न भूलें। – GeekyMonkey

6

कोड:

using System.Net.Mail 

new SmtpClient("smtp.server.com", 25).send("[email protected]", 
              "[email protected]", 
              "subject", 
              "body"); 

मास ईमेल:

SMTP सर्वर आमतौर पर, कनेक्शन टोपी की संख्या पर एक सीमा होती है एक ही बार में संभाल कर सकते हैं यदि आप सैकड़ों ईमेल भेजने का प्रयास करें आप आवेदन अनुत्तरदायी दिखाई दे सकता है।

समाधान:

  • आप का निर्माण कर रहे हैं, तो एक WinForm तो कतार कार्रवाई करने के लिए एक BackgroundWorker का उपयोग करें।
  • यदि आप आईआईएस एसएमटीपी सर्वर या एक एसएमटीपी सर्वर का उपयोग कर रहे हैं जिसमें आउटबॉक्स फ़ोल्डर है तो आप SmtpClient() का उपयोग कर सकते हैं। PickupDirectoryLocation = "c:/smtp/outboxFolder"; यह आपके सिस्टम को उत्तरदायी बनाए रखेगा।
  • यदि आप एक स्थानीय एसएमटीपी सर्वर का उपयोग नहीं कर रहे हैं, तो आप फ़ाइलवाटर का उपयोग करने के लिए सिस्टम सेवा का निर्माण करने के लिए एक से अधिक की निगरानी करने के लिए सिस्टम सेवा बना सकते हैं, फिर वहां मौजूद किसी भी ईमेल को संसाधित करें।
+1

मेरे सरल उद्देश्यों के लिए आपका उत्तर अच्छी तरह से काम किया। 20 की बजाय कोड की दो पंक्तियां! – MrVimes

2

मैं दृढ़ता से aspNetEmail पुस्तकालय की सिफारिश कर सकते हैं: अपनी आवश्यकताओं केवल बुनियादी रहे हैं http://www.aspnetemail.com/

System.Net.Mail कहीं आप मिल जाएगा, लेकिन यदि आप मुसीबत में पड़, कृपया बाहर aspNetEmail की जाँच करें। इसने मुझे समय का एक गुच्छा बचा लिया है, और मैं अन्य develoeprs के बारे में पता है जो भी इसके द्वारा कसम खाता हूँ!

+0

यह एक वाणिज्यिक उत्पाद है जहां आपको लाइसेंस की आवश्यकता होगी। –

15

अधिक तेज़ तरीके से थोक ईमेल भेजने का सबसे अच्छा तरीका धागे का उपयोग करना है। मैंने थोक कंसोल भेजने के लिए इस कंसोल एप्लिकेशन को लिखा है। मैंने दो धागे पूल बनाकर थोक ईमेल आईडी को दो बैचों में अलग कर दिया है।

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
using System.Net.Mail; 

namespace ConsoleApplication1 
{ 
    public class SendMail 
    { 
     string[] NameArray = new string[10] { "Recipient 1", 
               "Recipient 2", 
               "Recipient 3", 
               "Recipient 4", 
               "Recipient 5", 
               "Recipient 6", 
               "Recipient 7", 
               "Recipient 8", 
               "Recipient 9", 
               "Recipient 10" 
              };   

     public SendMail(int i, ManualResetEvent doneEvent) 
     { 
      Console.WriteLine("Started sending mail process for {0} - ", NameArray[i].ToString() + " at " + System.DateTime.Now.ToString()); 
      Console.WriteLine(""); 
      SmtpClient mailClient = new SmtpClient(); 
      mailClient.Host = Your host name; 
      mailClient.UseDefaultCredentials = true; 
      mailClient.Port = Your mail server port number; // try with default port no.25 

      MailMessage mailMessage = new MailMessage(FromAddress,ToAddress);//replace the address value 
      mailMessage.Subject = "Testing Bulk mail application"; 
      mailMessage.Body = NameArray[i].ToString(); 
      mailMessage.IsBodyHtml = true; 
      mailClient.Send(mailMessage); 
      Console.WriteLine("Mail Sent succesfully for {0} - ",NameArray[i].ToString() + " at " + System.DateTime.Now.ToString()); 
      Console.WriteLine(""); 

      _doneEvent = doneEvent; 
     } 

     public void ThreadPoolCallback(Object threadContext) 
     { 
      int threadIndex = (int)threadContext; 
      Console.WriteLine("Thread process completed for {0} ...",threadIndex.ToString() + "at" + System.DateTime.Now.ToString()); 
      _doneEvent.Set(); 
     }  

     private ManualResetEvent _doneEvent; 
    } 


    public class Program 
    { 
     static int TotalMailCount, Mailcount, AddCount, Counter, i, AssignI; 
     static void Main(string[] args) 
     { 
      TotalMailCount = 10; 
      Mailcount = TotalMailCount/2; 
      AddCount = Mailcount; 
      InitiateThreads();      

      Thread.Sleep(100000); 
     } 

     static void InitiateThreads() 
     { 
      //One event is used for sending mails for each person email id as batch 
      ManualResetEvent[] doneEvents = new ManualResetEvent[Mailcount]; 

      // Configure and launch threads using ThreadPool: 
      Console.WriteLine("Launching thread Pool tasks..."); 

      for (i = AssignI; i < Mailcount; i++)    
      { 
       doneEvents[i] = new ManualResetEvent(false); 
       SendMail SRM_mail = new SendMail(i, doneEvents[i]); 
       ThreadPool.QueueUserWorkItem(SRM_mail.ThreadPoolCallback, i); 
      } 

      Thread.Sleep(10000); 

      // Wait for all threads in pool to calculation... 
      //try 
      //{ 
      // // WaitHandle.WaitAll(doneEvents); 
      //} 
      //catch(Exception e) 
      //{ 
      // Console.WriteLine(e.ToString()); 
      //} 

      Console.WriteLine("All mails are sent in this thread pool."); 
      Counter = Counter+1; 
      Console.WriteLine("Please wait while we check for the next thread pool queue"); 
      Thread.Sleep(5000); 
      CheckBatchMailProcess();    
     } 

     static void CheckBatchMailProcess() 
     { 

      if (Counter < 2) 
      { 
       Mailcount = Mailcount + AddCount; 
       AssignI = Mailcount - AddCount; 
       Console.WriteLine("Starting the Next thread Pool"); 

       Thread.Sleep(5000); 
       InitiateThreads(); 
      } 

      else 
      { 
       Console.WriteLine("No thread pools to start - exiting the batch mail application"); 
       Thread.Sleep(1000); 
       Environment.Exit(0); 
      } 
     } 
    } 
} 

मैं एक sample.It के लिए सरणी सूची में 10 प्राप्तकर्ताओं को परिभाषित किया है दो धागा पूल भेजने के लिए mails.You भी अपने डेटाबेस से विवरण चुन सकते हैं बनाने के लिए ईमेल के दो बैचों का निर्माण करेगा।

आप इस कोड का उपयोग कंसोल एप्लिकेशन में कॉपी और पेस्ट करके कर सकते हैं। (Program.cs फ़ाइल को प्रतिस्थापित करना)। फिर एप्लिकेशन उपयोग करने के लिए तैयार है।

मुझे आशा है कि यह आपकी मदद करेगा :)।

+0

+1 मेरे पास एक ऐप है जहां मैं इसका उपयोग कर सकता हूं। धन्यवाद! – gnome

+0

+1 मैं घंटों के लिए खोज रहा था। आपका सबसे अच्छा और स्पष्ट है। –

3

आप SMTP का उपयोग एसएमटीपी या सीडीओ

का उपयोग कर ईमेल भेज सकते हैं:

mail.From = new MailAddress("[email protected]"); 
mail.To.Add("to_address"); 
mail.Subject = "Test Mail"; 
mail.Body = "This is for testing SMTP mail from GMAIL"; 

SmtpServer.Port = 587; 
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password"); 
SmtpServer.EnableSsl = true; 

स्रोत: C# SMTP Email

CDO.Message oMsg = new CDO.Message(); 
CDO.IConfiguration iConfg; 
iConfg = oMsg.Configuration; 
ADODB.Fields oFields; 
oFields = iConfg.Fields; 
ADODB.Field oField = oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"]; 
oFields.Update(); 
oMsg.Subject = "Test CDO"; 
oMsg.From = "from_address"; 
oMsg.To = "to_address"; 
oMsg.TextBody = "CDO Mail test"; 
oMsg.Send(); 

स्रोत: C# CDO Email

मैनली

0

FluentEmail लाइब्रेरी पर एक नज़र डालें। मैं इसके बारे में ब्लॉग किया गया है here

आप अपनी आवश्यकताओं के लिए एक अच्छी और धाराप्रवाह एपीआई है:

Email.FromDefault() 
.To("[email protected]") 
.Subject("New order has arrived!") 
.Body("The order details are…") 
.Send();