Отправка и прием почты реализуются с помощью Delphi достаточно просто. Для отправки почты нам пригодится компонент idSMTP со странички Indy Clients палитры компонент Delphi.
Этот компонент реализует все нужное для отправки электрической почты по протоколу SMTP (Simple Mail Transfer Protocol - обычный протокол передачи почты), использующий 25 порт, по которому посылаются команды и текст письма. Этапы отправки электрической почты последующие:
1) соединение с SMTP сервером по 25 порту; 2) подготовка тела письма, определение отправителя и получателя письма; 3) отправка письма на SMTP сервер;
Разместив на форме компонент 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 и смотрится последующим образом
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;
|