background img

The New Stuff

Отправка почты с помощью C#


Всем привет! Давно что-та я ничего нового не писал, ну ничего исправлюсь :)
Сегодня я вам покажу как сделать приложения для отправки писем по e-mail на C#. Вроде и нет ничего сложного но в интернете все пишут какой то "бред" (извините за выражение) и делают все через ..... Ну да ладно, на то Я и виду свой блог чтоб писать все самое лучше :)

Приступим:
  1. Создадим пустой проект winForms или wpf (здесь без разницы, кому на чем проще)
  2. Подключим нужные нам юзинги:
    1. using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net;
      using System.Net.Mail;
      using System.Windows;
  3. Напишем следующий метод:
    1. public void SendMessage(string strName, string strLog, string strText, string strPass, string outMail,
      string strSubject)
      {
      try
      {
      // обнулим на всяк случай
      string smtp = "";
      int port = 0;

      // здесь не уверен на счет портов
      // может (скорее всего) они неправильны, но если что
      // это все легко гуглится ;) парвильный только gmail.com
      var mailCoding = new Dictionary
      {
      {"gmail.com", 587},
      {"yandex.ru", 225},
      {"mail.ru", 235},
      {"list.ru", 254},
      {"inbox.ru", 215},
      {"bk.ru", 255}
      };

      // поиск нужного порта и smtp при отправке
      // можно так сделать, но нет мы КРУТЫЕ
      // и напишем с помощью LINQ
      //foreach (var kvp in mailCoding)
      //{
      // if (strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1)
      // {
      // smtp = "smtp." + kvp.Key;
      // port = kvp.Value;
      // }
      //}
      foreach (var kvp in mailCoding.Where(kvp => strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1))
      {
      smtp = "smtp." + kvp.Key;
      port = kvp.Value;
      }

      using (var mailMessage = new MailMessage(strName + " <" + strLog + ">", outMail))
      {
      mailMessage.Subject = strSubject; // тема письма
      mailMessage.Body = strText; // письмо
      mailMessage.IsBodyHtml = false; // без html, но можно включить
      using (var sc = new SmtpClient(smtp, port))
      {
      sc.EnableSsl = true;
      sc.DeliveryMethod = SmtpDeliveryMethod.Network;
      sc.UseDefaultCredentials = false;
      sc.Credentials = new NetworkCredential(strLog, strPass);
      sc.Send(mailMessage);
      }
      }
      }
      catch (Exception exception)
      {
      MessageBox.Show(exception.Message, "Ошибка");
      }
      }
Вот и все, прокомментировал немножко, должно хватить, ну если что-то будет вам непонятно или не получатся, пишите не стесняйтесь.
P.S. Если хотите про что-та интересное почитать и про что мало где пишут (ну или совсем не пишут), пишете мне буду очень рад помочь.
Удачи в ПРОграммировании.

Всем привет! Давно что-та я ничего нового не писал, ну ничего исправлюсь :)
Сегодня я вам покажу как сделать приложения для отправки писем по e-mail на C#. Вроде и нет ничего сложного но в интернете все пишут какой то "бред" (извините за выражение) и делают все через ..... Ну да ладно, на то Я и виду свой блог чтоб писать все самое лучше :)

Приступим:
  1. Создадим пустой проект winForms или wpf (здесь без разницы, кому на чем проще)
  2. Подключим нужные нам юзинги:
    1. using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net;
      using System.Net.Mail;
      using System.Windows;
  3. Напишем следующий метод:
    1. public void SendMessage(string strName, string strLog, string strText, string strPass, string outMail,
      string strSubject)
      {
      try
      {
      // обнулим на всяк случай
      string smtp = "";
      int port = 0;

      // здесь не уверен на счет портов
      // может (скорее всего) они неправильны, но если что
      // это все легко гуглится ;) парвильный только gmail.com
      var mailCoding = new Dictionary
      {
      {"gmail.com", 587},
      {"yandex.ru", 225},
      {"mail.ru", 235},
      {"list.ru", 254},
      {"inbox.ru", 215},
      {"bk.ru", 255}
      };

      // поиск нужного порта и smtp при отправке
      // можно так сделать, но нет мы КРУТЫЕ
      // и напишем с помощью LINQ
      //foreach (var kvp in mailCoding)
      //{
      // if (strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1)
      // {
      // smtp = "smtp." + kvp.Key;
      // port = kvp.Value;
      // }
      //}
      foreach (var kvp in mailCoding.Where(kvp => strLog.IndexOf(kvp.Key, StringComparison.Ordinal) > -1))
      {
      smtp = "smtp." + kvp.Key;
      port = kvp.Value;
      }

      using (var mailMessage = new MailMessage(strName + " <" + strLog + ">", outMail))
      {
      mailMessage.Subject = strSubject; // тема письма
      mailMessage.Body = strText; // письмо
      mailMessage.IsBodyHtml = false; // без html, но можно включить
      using (var sc = new SmtpClient(smtp, port))
      {
      sc.EnableSsl = true;
      sc.DeliveryMethod = SmtpDeliveryMethod.Network;
      sc.UseDefaultCredentials = false;
      sc.Credentials = new NetworkCredential(strLog, strPass);
      sc.Send(mailMessage);
      }
      }
      }
      catch (Exception exception)
      {
      MessageBox.Show(exception.Message, "Ошибка");
      }
      }
Вот и все, прокомментировал немножко, должно хватить, ну если что-то будет вам непонятно или не получатся, пишите не стесняйтесь.
P.S. Если хотите про что-та интересное почитать и про что мало где пишут (ну или совсем не пишут), пишете мне буду очень рад помочь.
Удачи в ПРОграммировании.

0 коммент.:

Отправить комментарий

Popular Posts