Главная | Регистрация | Вход
Понедельник, 04.08.2025, 13:04
Приветствую Вас Гость | RSS
Навигация:
Категории:
Базы данных [9]
Графика и Игры [0]
Интернет и Сети [0]
Компоненты и Классы [0]
Мультимедиа [0]
ОС и Железо [0]
Программа и Интерфейс [0]
Технологии [0]
Файловая система [0]
Программирование на Delphi [23]
Обучающие статьи [26]
Небольшие уроки по Delphi
Синтаксис [0]
Рабочий стол [0]
qwerty [0]
Чат сайта:
Главная » Статьи » Обучающие статьи

Отправка электронного письма средствами Delphi
Отправка и прием почты реализуются при помощи Delphi довольно просто. Для отправки почты нам понадобится компонент idSMTP со страницы Indy Clients палитры компонентов Delphi.

Этот компонент реализует все необходимое для отправки электронной почты по протоколу SMTP (Simple Mail Transfer Protocol - простой протокол передачи почты), использующий 25 порт, по которому посылаются команды и текст письма. Этапы отправки электронной почты следующие:

1) соединение с SMTP сервером по 25 порту;
2) подготовка тела письма, определение отправителя и получателя письма;
3) отправка письма на SMTP сервер;

Разместив на форме компонент idSMTP, займёмся его настройкой. Настройку порта можно произвести в инспекторе объектов, установив свойство Port в значение 25, или в коде программы сделать то же самое:

Code
IdSMTP1.Port:=25;

Соединение с сервером
Для соединения с SMTP сервером, который будет осуществлять отправку нашей почты, нужно указать его URL, для сервера mail.ru это производится следующим образом :

Code
IdSMTP1.Host := 'smtp.mail.ru';

...и для сервера rambler.ru
Code
IdSMTP1.Host := 'smtp.rambler.ru';

Соединение с сервером производится методом Connect:

Code
procedure Connect(const ATimeout: Integer); override;

где ATimeout - необязательный параметр, задает максимальное время в миллисекундах ожидания ответа с SMTP сервера, по истечении которого попытка установить соединение прекращается.

Например:

Code
IdSMTP1.Connect(5000);

Если при соединении с сервером требуется авторизация, то значение свойства AuthenticationType нужно установить в atLogin, при этом в инспекторе объектов также нужно определить свойства Username(имя пользователя. К примеру, Username почтового ящика delphi@mail.ru - delphi) и Password(пароль на ящик), или сделать то же программно:

Code
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Username:='delphi';
IdSMTP1.Password:='something';

Если авторизация не требуется, то свойство AuthenticationType в инспекторе объектов нужно установить в atNone, либо сделать это программно:

Code
IdSMTP1.AuthenticationType:=atNone;

После применения метода Connect, нужно анализировать логическое свойство Connected, которое в случае удачного соединения устанавливается в True. После этого при помощи метода Send можно отправлять сообщение:

Code
if Connected=True then IdSMTP1.Send(Msg);

Структура письма

Метод Send отправляет тело сообщения, представляющего собой структуру типа TIdMessage;

Структура письма реализуется в Delphi отдельным компонентом TIdMessage, расположенным на палитре компонентов Indy Misc и выглядит следующим образом

TidMessage Структура TIdMessage определяется следующим образом:

Code
var
Msg: TIdMessage;
begin
Msg := TIdMessage.Create(Form1);  
Msg.Recipients.EMailAddresses := 'nekitosp@mail.ru'; //адреса получателей  
//через запятую
Msg.Subject:='Тема сообщения'; //текст темы сообщения
Msg.From.Address:=IdSMTP1.Username; //указываем автора письма
Msg.Body.Text:='текст сообщения'; //размещаем текст сообщения
Msg.Date:=StrToDate('01.12.6666');//дата отправки письма может быть любой
IdSMTP1.Send(Msg);
msg.Free;
end;

Присоединяем к письму аттачмент
Если вам нужно отправить с письмом файл, т.е. аттачмент, то для этого нужно создать объект класса TidAttachment. Для этого применяется следующий конструктор:

Code
constructor Create(Collection: TIdMessageParts; const AFileName: TFileName = ''); reintroduce;

где Collection - объект класса TIdMessageParts, представляющее собой коллекцию приложений к электронному письму.
контстанта AFileName типа TFileName - представляет собой обычную текстовую строку с указанием правильного пути к файлу, например "C:file.zip", по умолчанию имеет значение ''.

Таким образом, продолжая наш пример, строкой вида

Code
TIdAttachment.Create(Msg.MessageParts,'c:\file.zip');

мы заполняем свойство MessageParts объекта Msg информацией о аттачменте. Теперь наша структура письма содержит информацию о аттачменте. После отправки сообщения нужно разорвать соединение с сервером, чтобы оно не "висело". Это производится методом Disconnect:

Code
IdSMTP1.Disconnect;

Исходники рабочего клиента для @mail.ru и @rambler.ru можно скачать по этой ссылке

Так же буду дополнять клиент остальными серверами. smile а у кого они уже имеются, просьба отписаться в комментах.

Источник: http://таких очень много, но на всех одна большая ошибка в коде :-D

Категория: Обучающие статьи | Добавил: NekitoS (26.05.2009) | Автор: NekitoS
Просмотров: 6320 | Рейтинг: 4.2/6 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Контакты
ICQ:306182
Статистика
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright "Delphi Project Ltd" © 2025