Класс для отправки сообщений по E-mail
Автор: Александр Уваров
22 ноября 2012 года
Класс Mail предназначен для отправки сообщений на E-Mail сервер с помощью протокола SMTP (Simple Mail Transfer Protocol).
Конструктор класса
public Mail (string Host, int Port, string User, string Password, string From, string To, string CC = “”, int CodePage = 20866);
Инициализирует параметры соединения с почтовым сервером, который позволяет отправлять сообщения по протоколу SMTP (Simple Mail Transfer Protocol).
Параметры:
- Host – имя или IP адрес почтового сервера;
- Port – номер порта почтового сервера;
- User – имя учетной записи;
- Password – пароль учетной записи;
- From – адрес отправителя электронной почты;
- To – адрес получателя электронной почты;
- CC – список адресов получателей копии электронной почты, если список пуст, то передается пустая строка;
- CodePage – кодовая страница, определяет кодировку параметров From, To, по умолчанию 20866 (koi8-r).
Формат строки представления адреса получателя и отправителя:
“<E-Mail>[,<DisplayName>]”
Формат строки представления, списка получателей копии электронной почты:
“[<E-Mail[,<E-Mail>, … , <E-Mail>]”
гдеб
- E-Mail – адрес электронной почты;
- DisplayName - отображаемое имя.
Методы класса
public bool MailSend (string Subject, string Body, string AttachFile)
Отправляет указанное сообщение на сервер SMTP, для доставки получателем.
Параметры:
- Body – сообщение;
- Subject – тема сообщения;
- AttachFile – полное имя вложенного файла в сообщение или пустая строка, если его нет.
Возвращаемый результат:
- True – сообщение отправлено успешно или False, если произошла ошибка.
public void MailClose()
Закрывает текущее соединение с почтовым сервером по протоколу SMTP. Освобождает все занятые ресурсы.
Свойства класса
public string Err { get; }
Возвращает строку с сообщением об ошибке, возникшей при отправке почтового сообщения, или пустую строку, если ошибок нет.
Пример использования класса Mail
// Пример использования класса Mail
//****************************************
using System;
using SM;
...
// создаем объект
Mail oSM = new Mail("67.13.256.48", 25, "ssk/cnt_notif", "adm",
"Sidorov@fsk.sdd,Сидоров Иван Иванович",
"Petrov@fsk.sdd,Петров Алексей Николаевич");
// отправляем сообщение
if (oSM.MailSend("Тест", "Тестовое сообщение", "d:\test.txt"))
Console.WriteLine("Сообщение отправлено");
else
Console.WriteLine("Ошибка! " + oSM.Err);
// закрываем соединение и освобождаем занятые ресурсы
oSM.MailClose();
...
Код класса
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
namespace SM {
// Класс для отправки сообщений на E-Mail,
// с помощью протокола SMTP (Simple Mail Transfer Protocol)
public class Mail {
private SmtpClient Client;
private MailMessage Message;
private string Error;
//*************************************************************
//* Function: Mail
//* Notes: Конструктор класса
//*
public Mail (string Host, int Port, string User, string Password,
string From, string To, string CC = "", int CodePage = 20866) {
int Index = 0;
MailAddress from;
MailAddress to;
NetworkCredential Credentials = new NetworkCredential(User, Password);
this.Client = new SmtpClient(Host, Port);
this.Client.Credentials = Credentials;
Index = From.IndexOf(',');
if (Index >= 0) {
from = new MailAddress(From.Substring(0, Index),
From.Substring(Index + 1),
System.Text.Encoding.GetEncoding(CodePage));
}
else {
from = new MailAddress(From);
}
Index = To.IndexOf(',');
if (Index >= 0) {
to = new MailAddress(To.Substring(0, Index),
To.Substring(Index + 1),
System.Text.Encoding.GetEncoding(CodePage));
}
else {
to = new MailAddress(To);
}
this.Message = new MailMessage(from, to);
if (!String.IsNullOrEmpty(CC)) {
this.Message.CC.Add(CC);
}
this.Error = "";
}
//*** End of Mail ***********
//*************************************************************
//* Function: MailSend
//* Notes: Отправляет указанное сообщение Body на сервер SMTP для
//* доставки получателем.
// Subject - тема сообщения.
//* AttachFile - полное имя вложенного файла в сообщение или
//* пустая строка, если его нет.
//* Функция возвращает true, если сообщение отправлено успешно или false,
//* в любом другом случае.
//*
public bool MailSend (string Subject, string Body, string AttachFile) {
Attachment data = new Attachment(AttachFile, MediaTypeNames.Text.Plain);
this.Error = "";
this.Message.Subject = Subject;
this.Message.Body = Body;
this.Message.Attachments.Add(data);
try {
this.Client.Send(Message);
}
catch (Exception e) {
this.Error = e.Message;
return false;
}
this.Message.Attachments.Clear();
return true;
}
//*** End of MailSend ***********
//*************************************************************
//* Function: MailClose
//* Notes: Закрывает текущее соединение с почтовым сервером по протоколу SMTP.
//* Освобождает все занятые ресурсы.
//*
public void MailClose () {
this.Client = null;
this.Message.Dispose();
this.Message = null;
}
//*** End of MailClose ***********
// получить ошибку при передачи сообщения
public string Err {
get {
return this.Error;
}
}
}
}