अधिक तेज़ तरीके से थोक ईमेल भेजने का सबसे अच्छा तरीका धागे का उपयोग करना है। मैंने थोक कंसोल भेजने के लिए इस कंसोल एप्लिकेशन को लिखा है। मैंने दो धागे पूल बनाकर थोक ईमेल आईडी को दो बैचों में अलग कर दिया है।
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 फ़ाइल को प्रतिस्थापित करना)। फिर एप्लिकेशन उपयोग करने के लिए तैयार है।
मुझे आशा है कि यह आपकी मदद करेगा :)।
स्रोत
2009-11-06 12:08:02
सीधे कोड में पासवर्ड एम्बेड करने के लिए क्या विकल्प हैं? –
नेटवर्क क्रेडेंशियल क्लास अधिभारित है। यदि आप एक खाली कन्स्ट्रक्टर प्रदान करते हैं, तो यह वर्तमान उपयोगकर्ता के साथ उदाहरण बना देगा। वैकल्पिक रूप से, आप उपयोगकर्ता नाम और पासवर्ड भी एन्क्रिप्ट कर सकते हैं और इसे बाहरी रूप से स्टोर कर सकते हैं। यह इस बात पर भी निर्भर करता है कि आप अपना मेल सर्वर कैसे सेट अप करते हैं। आप लोकहोस्ट पर एक एसएमटीपी सर्वर स्थापित कर सकते हैं और इसे लूपबैक पते के लिए रिले होने की अनुमति देते हैं, ताकि आप बिना किसी क्रेडेंशियल के ईमेल भेज सकें। हम बाद वाले करते हैं। यह हल्का, सरल है, और पासवर्ड की कोई भंडारण की आवश्यकता नहीं है (क्योंकि कोई भी लूपबैक पते से रिले कर सकता है - जिसका अर्थ है आईआईएस भी कर सकता है)। –
आप अपनी कॉन्फ़िगरेशन फ़ाइल में '' के साथ उन सभी को भी कॉन्फ़िगर कर सकते हैं। मैं विकास के दौरान निर्देशिका में मेल भेजने के लिए हर समय इसका उपयोग करता हूं, फिर लाइव होने के लिए तैयार होने पर इसे वास्तविक भेजने के लिए स्विच करता हूं। –
dotjoe