назад к списку статей

C# mail send. Простой пример: C# отправка почты

C# mail sendСегодня мы поговорим о том, как отправить email, используя язык программирования C#. В .Net FrameWork, начиная с версии 1.1, есть встроенные средства по отправке писем.

Классы по работе с email находятся в пространстве имен System.Net.Mail. Они реализуют такие полезные функции, как:

  • отправка почты, в том числе нескольким адресатам;
  • отправка копии и скрытой копии письма;
  • вложение файла к письму;
  • использование HTML-кода в теле письма.

В данной статье рассмотрим основные классы работы с mail и напишем небольшой код отправки письма C# mail send. В качестве SMTP-сервера будем использовать сервер GMail. Он использует SSL протокол, обеспечивающий безопасный способ соединения между клиентом и сервером.

В C# отправка почты в основном реализуется двумя классами: MailMessage и SmtpClient. MailMessage содержит сведения о заголовке и теле письма, отправителе и получателях. SmtpClient хранит информацию об SMTP-сервере: хост, порт, наличие SSL и т.д.

C# mail send

Рассмотрим основные классы работы с письмами в C#. Пространство имен System.Net.Mail содержит несколько нужных нам классов:

MailMessage

Основной класс работы с письмами в .Net Framework. Мы будем использовать следующие свойства класса:

  • From: адрес отправителя в виде экземпляра класса MailAddress;
  • To: коллекция адресов получателей;
  • Subject: тема или заголовок письма типа String;
  • Body: Тело письма, т.е. само сообщение;
  • Attachments: коллекция присоединенных к письму файлов. При необходимости вложить в письмо файл, нужно добавить его Attachment в список присоединенных файлов Attachments.

SmtpClient

Позволяет отправлять email по протоколу SMTP (Simple Mail Transfer Protocol). Воспользуемся SMTP-сервером от Google smtp.gmail.com. Нам понадобятся следующие свойства класса:

  • Host: имя SMTP-сервера для отправки email;
  • Port: порт, используемый для SMTP-транзакций. По умолчанию равен 25, что соответствует незашифрованному каналу. Google свои каналы шифрует, поэтому мы будет использовать порт 587;
  • EnableSsl: показывает, используется ли SSL протокол для шифрования трафика. Google требует протокол SSL, поэтому установим это свойство в True;
  • Credentials: предоставляет учетные данные для проверки подлинности на основе пароля;
  • DeliveryMethod: метод обработки исходящих сообщений электронной почты. У нас этот параметр будет равен SmtpDeliveryMethod.Network, что означает передачу email по сети на SMTP-сервер.

Мы будем использовать метод Send для отправки нашего письма на SMTP-сервер для дальнейшей доставки.

Attachment

Класс Attachment реализует присоединение файла к письму. Если хотите переслать файл, нужно добавить Attachment вашего файла в список MailMessage.Attachments. В качестве параметра в класс Attachment можно передать имя файла или его Stream.

При отправке письма с присоединенным файлом желательно сжимать его в архив. Это увеличит скорость передачи. К тому же, если передать в одном письме тысячи файлов по отдельности, то получатель увидит не очень приятное зрелище: огромный список присоединенных файлов. Я использую для сжатия бесплатный архиватор 7-zip. Здесь можно посмотреть пример добавления в архив 7-zip на C#.

Пример: c# отправка почты

Не забываем подключить сборку System.Net.Mail. На C# отправка почты сводится к нескольким строчкам кода:

using System;
using System.Net;
using System.Net.Mail;
/// <summary>
 /// Отправка письма на почтовый ящик C# mail send
 /// </summary>
 /// <param name="smtpServer">Имя SMTP-сервера</param>
 /// <param name="from">Адрес отправителя</param>
 /// <param name="password">пароль к почтовому ящику отправителя</param>
 /// <param name="mailto">Адрес получателя</param>
 /// <param name="caption">Тема письма</param>
 /// <param name="message">Сообщение</param>
 /// <param name="attachFile">Присоединенный файл</param>
 public static void SendMail(string smtpServer, string from , string password,
string mailto, string caption, string message, string attachFile = null)
 {
  try
  { 
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress(from);
    mail.To.Add(new MailAddress(mailto));
    mail.Subject = caption;
    mail.Body = message;
    if (!string.IsNullOrEmpty(attachFile))
      mail.Attachments.Add(new Attachment(attachFile));
    SmtpClient client = new SmtpClient(); 
    client.Host = smtpServer; 
    client.Port = 587; 
    client.EnableSsl = true;
    client.Credentials = new NetworkCredential(from.Split('@')[0], password);
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.Send(mail);
    mail.Dispose();
  }
  catch (Exception e)
  {
    throw new Exception("Mail.Send: " + e.Message);
  }
 }

Пример вызова C# mail send (пробел перед именами ящиков убрать):
SendMail("smtp.gmail.com", "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.", "myPassword", "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.", "Тема письма", "Тело письма", "C:\\1.txt");

Вам также может быть интересно:

Маска файла с помощью регулярных выражений

назад к списку статей

Поделитесь этой страницей со своими друзьями:

Нравится


I'mon Google+ .