Отправка электронной почты с помощью C#

Как указано в других ответах, наборы представляют собой структуры данных (и математические концепции), которые не сохраняют порядок элементов -

Однако, используя комбинацию множеств и словарей, возможно, что вы можете добиваться того, что вы хотите - попробуйте использовать эти фрагменты:

# 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
46
задан Can Berk Güder 10 March 2009 в 12:13
поделиться

6 ответов

Вы могли использовать Система. Сеть. Почта. Класс 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;
}
73
ответ дан CSS 7 November 2019 в 23:58
поделиться

Код:

using System.Net.Mail

new SmtpClient("smtp.server.com", 25).send("from@email.com", 
                                           "to@email.com", 
                                           "subject", 
                                           "body");

Массовые электронные письма:

серверы SMTP обычно имеют предел на количество шляпы соединения, может обработать сразу, при попытке послать сотни электронных писем Вы, приложение может казаться безразличным.

Решения:

  • , Если Вы создаете WinForm тогда, используют BackgroundWorker для обработки очереди.
  • при использовании сервера SMTP IIS или сервера SMTP, который имеет папку ящика исходящих сообщений тогда, можно использовать SmtpClient ().PickupDirectoryLocation = "c:/smtp/outboxFolder"; Это сохранит Вашу систему быстро реагирующей.
  • , Если Вы не используете локальный сервер SMTP, чем Вы, мог бы создать системную службу для использования Filewatcher для контроля forlder, чем тогда обработает какие-либо электронные письма, которые Вы отбрасываете там.
9
ответ дан missaghi 7 November 2019 в 23:58
поделиться

Платформа.NET имеет некоторые встроенные классы, который позволяет Вам посылать электронное письмо с помощью своего приложения.

необходимо смотреть в Системе. Сеть. Почтовое пространство имен, где Вы найдете классы MailMessage и SmtpClient. Можно установить BodyFormat класса MailMessage к MailFormat.Html.

могло также быть полезно при использовании свойства AlternateViews класса MailMessage так, чтобы можно было обеспечить версию простого текста почты, так, чтобы это могло быть считано клиентами, которые не поддерживают HTML.

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

4
ответ дан Frederik Gheysels 7 November 2019 в 23:58
поделиться

Я могу настоятельно рекомендовать aspNetEmail библиотеку: http://www.aspnetemail.com/

Эти System.Net.Mail получит Вас где-нибудь, если Ваши потребности будут только главными, но если Вы сталкиваетесь с проблемой, проверьте aspNetEmail. Это сохранило меня набор времени, и я знаю о другом develoeprs, кто также клянется им!

2
ответ дан JMS 7 November 2019 в 23:58
поделиться

Используйте Систему пространства имен. Сеть. Почта. Вот ссылка на страницу

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 и отослать!

1
ответ дан bentford 7 November 2019 в 23:58
поделиться

Лучший способ отправлять массовые электронные письма для более быстрого способа - использовать потоки. Я написал это консольное приложение для отправки массовых писем. Я выделил идентификатор массовой рассылки на два пакета, создав два пула потоков.

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). Затем приложение готово к использованию.

Надеюсь, это вам поможет:).

16
ответ дан 26 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: