Как указано в других ответах, наборы представляют собой структуры данных (и математические концепции), которые не сохраняют порядок элементов -
Однако, используя комбинацию множеств и словарей, возможно, что вы можете добиваться того, что вы хотите - попробуйте использовать эти фрагменты:
# save the element order in a dict:
x_dict = dict(x,y for y, x in enumerate(my_list) )
x_set = set(my_list)
#perform desired set operations
...
#retrieve ordered list from the set:
new_list = [None] * len(new_set)
for element in new_set:
new_list[x_dict[element]] = element
Вы могли использовать Система. Сеть. Почта. Класс MailMessage платформы.NET.
можно найти документация MSDN здесь .
Вот простой пример (фрагмент кода):
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("test@example.com", "TestFromName");
MailAddress to = new MailAddress("test2@example.com", "TestToName");
MailMessage myMail = new System.Net.Mail.MailMessage(from, to);
// add ReplyTo
MailAddress replyto = new MailAddress("reply@example.com");
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;
}
Код:
using System.Net.Mail
new SmtpClient("smtp.server.com", 25).send("from@email.com",
"to@email.com",
"subject",
"body");
Массовые электронные письма:
серверы SMTP обычно имеют предел на количество шляпы соединения, может обработать сразу, при попытке послать сотни электронных писем Вы, приложение может казаться безразличным.
Решения:
Платформа.NET имеет некоторые встроенные классы, который позволяет Вам посылать электронное письмо с помощью своего приложения.
необходимо смотреть в Системе. Сеть. Почтовое пространство имен, где Вы найдете классы MailMessage и SmtpClient. Можно установить BodyFormat класса MailMessage к MailFormat.Html.
могло также быть полезно при использовании свойства AlternateViews класса MailMessage так, чтобы можно было обеспечить версию простого текста почты, так, чтобы это могло быть считано клиентами, которые не поддерживают HTML.
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx
Я могу настоятельно рекомендовать aspNetEmail библиотеку: http://www.aspnetemail.com/
Эти System.Net.Mail
получит Вас где-нибудь, если Ваши потребности будут только главными, но если Вы сталкиваетесь с проблемой, проверьте aspNetEmail. Это сохранило меня набор времени, и я знаю о другом develoeprs, кто также клянется им!
Используйте Систему пространства имен. Сеть. Почта. Вот ссылка на страницу
MSDN, можно отправить почтовому использованию класс SmtpClient.
я перефразировал пример кода, таким образом, контроль детали MSDNfor.
MailMessage message = new MailMessage(
"fromemail@contoso.com",
"toemail@contoso.com",
"Subject goes here",
"Body goes here");
SmtpClient client = new SmtpClient(server);
client.Send(message);
лучший способ послать много электронных писем состоял бы в том, чтобы поместить что-то вроде этого в forloop и отослать!
Лучший способ отправлять массовые электронные письма для более быстрого способа - использовать потоки. Я написал это консольное приложение для отправки массовых писем. Я выделил идентификатор массовой рассылки на два пакета, создав два пула потоков.
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);
}
}
}
}
Я определил 10 получателей в списке массивов для образца. Он создаст два пакета электронных писем для создания двух пулов потоков для отправки писем. Вы также можете выбрать детали из своей базы данных. .
Вы можете использовать этот код, скопировав и вставив его в консольное приложение. (Заменив файл program.cs). Затем приложение готово к использованию.
Надеюсь, это вам поможет:).