Отправка почты средствами Delphi
Отправка и прием почты реализуются при помощи Delphi довольно просто. Для отправки почты нам понадобится компонент idSMTP со страницы Indy Clients палитры компонентов Delphi (рис. 1).
рис.1
|
|
Этот компонент реализует все необходимое для отправки электронной почты по протоколу SMTP (Simple Mail Transfer Protocol - простой протокол передачи почты), использующий 25 порт, по которому посылаются команды и текст письма. Этапы отправки электронной почты следующие: |
1) соединение с SMTP сервером по 25 порту;
2) подготовка тела письма, определение отправителя и получателя письма;
3) отправка письма на SMTP сервер;
Полностью описание протокола SMTP пожно прочитать вот здесь http://rfc.com.ru/rfc2821.htm
Разместив на форме компонент idSMTP, займёмся его настройкой. Настройку порта можно произвести в инспекторе объектов, установив свойство Port в значение 25, или в коде программы сделать то же самое:
IdSMTP1.Port:=25;
Соединение с сервером
Для соединения с SMTP сервером, который будет осуществлять отправку нашей почты, нужно указать его URL, для сервера mail.ru это производится следующим образом :
IdSMTP1.Host := 'smtp.mail.ru';
Соединение с сервером производится методом Connect:
procedure Connect(const ATimeout: Integer); override;
где ATimeout - необязательный параметр, задает максимальное время в миллисекундах ожидания ответа с SMTP сервера, по истечении которого попытка установить соединение прекращается. |
Например,
IdSMTP1.Connect(5000);
Если при соединении с сервером требуется авторизация, то значение свойства AuthenticationType нужно установить в atLogin, при этом в инспекторе объектов также нужно определить свойства Username(имя пользователя. К примеру, Username почтового ящика delphi@mail.ru - delphi) и Password(пароль на ящик), или сделать то же программно:
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Username:='delphi';
IdSMTP1.Password:='something';
Если авторизация не требуется, то свойство AuthenticationType в инспекторе объектов нужно установить в atNone, либо сделать это программно:
IdSMTP1.AuthenticationType:=atNone;
После применения метода Connect, нужно анализировать логическое свойство Connected, которое в случае удачного соединения устанавливается в True. После этого при помощи метода Send можно отправлять сообщение:
if Connected=True then IdSMTP1.Send(Msg);
Структура письма
Метод Send отправляет тело сообщения, представляющего собой структуру типа TIdMessage;
Структура письма реализуется в Delphi отдельным компонентом TIdMessage, расположенным на палитре компонентов Indy Misc и выглядит следующим образом
рис.2. TidMessage |
Структура TIdMessage определяется следующим образом: |
var
Msg: TIdMessage;
begin
Msg.Subject:='тема сообщения'; //текст темы сообщения
Msg.Recipients.EMailAddresses:='bogdanwe@mail.ru';
//указываем адрес получателя
Msg.From.Adress:='delphi@mail.ru'; //указываем автора письма
Msg.Body.Text:='текст сообщения'; //размещаем текст сообщения
Msg.Date:=StrToDate('01.12.2004');//дата отправки письма может быть любой
end; |
С темой сообщения, я думаю, все понятно. Свойство
property Recipients: TIdEmailAddressList;
определяет получателя или получателей электронного письма. Свойством EMailAddresses, имеющего синтаксис:
property EMailAddresses: String;
конкретно определяются названия электронных учетных записей, которым адресуется письмо. Названия должны указываться через разделитель вида "," то есть через запятую. Например:
Msg.Recipients.EMailAddresses:='bogdanwe@mail.ru,delphi7@mail.ru';
Свойство From представляет собой объект типа TIdEmailAddressItem и содержит информацию о отправителе письма и в свою очередь включает в себя три свойства - Name, Address, Text.
Свойство Address содержит информацию о электронном ящике отправителя:
property Address: string;
например,
Msg.From.Address:='delphi@mail.ru';
Свойство Name представляет собой имя отправителя:
property Name: string;
например,
Msg.From.Name:='Антон Камолов';
Свойство Text содержит информацию обоих свойств. Тело письма представляет собой объект типа TStrings:
property Body: TStrings;
Присоединяем к письму аттачмент
Если вам нужно отправить с письмом файл, т.е. аттачмент, то для этого нужно создать объект класса TidAttachment. Для этого применяется следующий конструктор:
constructor Create(Collection: TIdMessageParts; const AFileName: TFileName = ''); reintroduce; где Collection - объект класса TIdMessageParts, представляющее собой коллекцию приложений к электронному письму.
контстанта AFileName типа TFileName - представляет собой обычную текстовую строку с указанием правильного пути к файлу, например "C:\file.zip", по умолчанию имеет значение ''. |
Таким образом, продолжая наш пример, строкой вида
TIdAttachment.Create(Msg.MessageParts,'c:\file.zip');
мы заполняем свойство MessageParts объекта Msg информацией о аттачменте.
Теперь наша структура письма содержит информацию о аттачменте. После отправки сообщения нужно разорвать соединение с сервером, чтобы оно не "висело". Это производится методом Disconnect:
IdSMTP1.Disconnect;
|