• Главная
  • Исходники Delphi
  • Справочники Delphi
  • Книги Delphi
  • Основы Delphi
  • библиотека Delphi исходников
  • Форум
  • Блоги

Последние записи

  • Прозрачность тайлсета в TPNGImage
  • Как сделать VBA макрос в excel
  • Поиск по столбцу 1-ого не нулевого значения (формулой в Microsoft Office Excel)
  • Простановка единиц в ячейки под объектами (Microsoft Office Excel)
  • Расчет затраченного времени между определенным рабочим временем (формулой в Microsoft Office Excel)
  • Мигающий экран на Assembler
  • VBA-макрос по копированию 10 строчек в выбранном диапазоне в Microsoft Office Excel
  • Копирование только нужного диапазона в Microsoft Office Excel
  • Перенос диапазона стоки в Microsoft Office Excel на другой лист по условию
  • Мелодия в Pascal.ABC.Net с помощью System.Console.Beep — задержка воспроизведения звука
  • .NET
  • ASP.NET
  • assembler
  • Basic
  • c/c++
  • CMS
  • Delphi
  • HTML
  • iPhone
  • Java
  • JavaScript
  • Linux
  • Pascal
  • Perl
  • Photoshop
  • php
  • Python
  • Ruby
  • SEO
  • sql
  • VBA
  • Win Api
  • Windows
  • XML и XSLT
  • Администрирование ОС
  • Апгрейды
  • Архив
  • Безопасность
  • Блоги
  • Веб-аналитика
  • Железо
  • Журнал
  • Заметки
  • Имейдж
  • Интервью
  • Исходники
  • Новости
  • Общалка
  • Операционные системы
  • Пост-обзор
  • Профлитература
  • Рассылка
  • Реклама
  • си шарп
  • Советы
  • Софт
  • Статьи
  • Топик-обзор
  • Файлы








28th
Авг

Создание почтового клиента в Delphi 7

Posted by admin under Исходники, Статьи

В этой статье я поэтапно объясню, как создать почтовик средствами Delphi: подключение к почтовому серверу, получение и обработка почты, завершение соединения.

Для работы с сетью, в Delphi используются Indy компоненты, которые вы можете найти на нескольких вкладках среды разработки. Найдите на вкладке Indy Clients – компонент IdPOP3, на вкладке Indy Misc – компонент IdMessage. С помощью компонента IdPOP3 мы сможем осуществить подключение к почтовому серверу по протоколу POP3 и получить необходимое нам кол-во сообщений. Компонент IdMessage будет использоваться, как буфер для получаемого письма. Ещё нам потребуется memo для отображения текста письма, и кнопка для загрузки очередного сообщения.

Получения одного письма:

procedure TForm1.Button1Click(Sender: TObject);
begin
POP3.Host:=’mail.58r.ru’; // адрес почтового сервера
POP3.Port:=110; // порт по которому будет осуществляться подключение
POP3.Username:=’test+58r.ru’; // Логин пользователя
POP3.Password:=’12345666′; // пароль пользователя
IdMessage.Clear; // очистка буфера для сообщения
POP3.Connect; // подключение по протоколу POP3, по настройкам в компоненте IdPOP3, с именем POP3
Memo1.Clear; // очистка компонента memo для отображения текста письма.
POP3.Retrieve(1,IdMessage); // получение одного сообщения
Memo1.Lines.AddStrings(IdMessage.Body); // передача сообщения из компонента IdMessage в memo
POP3.Delete(1); // удаление с сервера, полученного сообщения
POP3.Disconnect; // разрыв связи
end;    Обычно требуется загрузить несколько сообщений, все что есть на сервере. Я решил ограничиться 10 письмами, чтобы не усложнять код. Получаемые сообщения сохраняются в той же папке что и почтовая программа.

Получение 10 писем:

procedure TForm1.Button2Click(Sender: TObject);
label f;
var
mailcicl:integer; // счётчик получаемых писем
addr:string; // папка в которой будут сохраняться получаемые письма
begin
POP3.Host:=’mail.58r.ru’; // адрес почтового сервера
POP3.Port:=110; // порт по которому будет осуществляться подключение
POP3.Username:=’test+58r.ru’; // Логин пользователя
POP3.Password:=’12345666′; // пароль пользователя
addr:=ExtractFilePath(Application.ExeName); // получения адреса папки, в которой находиться наша программа
POP3.Connect; // подключение к серверу
for mailcicl:=1 to 10 do // цикл получения писем
begin
if POP3.CheckMessages<1 then goto f ; // Если писем нет, то выйти и цикла
IdMessage.Clear; // очистка буфера для сообщения
Memo1.Clear; // очистка компонента memo для отображения текста письма.
POP3.Retrieve(1,IdMessage); // получение одного сообщения
Memo1.Lines.AddStrings(IdMessage.Body); // передача сообщения из компонента IdMessage в memo
Memo1.Lines.SaveToFile(addr+inttostr(mailcicl)+’.txt’); // сохранение письма в папке, где находится наша программа
POP3.Delete(mailcicl); // удаление письма на сервере
end;
f: // метка выхода из цикла
POP3.Disconnect; // разрыв соединения с сервером end;

Каждое сообщения имеет атрибуты – это майл отправителя, тема сообщения, важность и другие элементы. Изучите компонент IdMessage, чтобы знать все возможные атрибуты.

Получения письма с атрибутам:
procedure TForm1.Button3Click(Sender: TObject);
var
i,numPosts: Integer;
begin
POP3.Host:=’mail.58r.ru’; // адрес почтового сервера
POP3.Port:=110; // порт по которому будет осуществляться подключение
POP3.Username:=’test+58r.ru’; // логин пользователя
POP3.Password:=’12345666′; // пароль пользователя
IdMessage.Clear; // очистка буфера для сообщения
POP3.Connect; // подключение по протоколу POP3, по настройкам в компоненте IdPOP3, с именем POP3
Memo1.Clear; // очистка компонента memo для отображения текста письма.
POP3.Retrieve(1,IdMessage); // получение одного сообщения
Memo1.Lines.AddStrings(IdMessage.Body); // передача сообщения из компонента IdMessage в memo

// вывод в компоненты Label информации о сообщении.
Label1.Caption := IdMessage.From.Text;
Label2.Caption := IdMessage.Recipients.EmailAddresses;
Label3.Caption := IdMessage.CCList.EMailAddresses;
Label4.Caption := IdMessage.Subject;
Label5.Caption := FormatDateTime(’dd mmm yyyy hh:mm:ss’, IdMessage.Date);
Label6.Caption := IdMessage.ReceiptRecipient.Text;
Label7.Caption := IdMessage.Organization;

POP3.Delete(1); // удаление с сервера, полученного сообщения
POP3.Disconnect; // разрыв связи
end;

Отправка почты осуществляется по протоколу SMTP, компонент IdSMTP, вы сможете найти его на вкладке Indy Clients. В данном примере отправка почты будет осуществляться после авторизации сервере, письмо отправляется с майла test@58r.ru, на майл test@58r.ru .

Отправка одного письма:

procedure TForm1.Button4Click(Sender: TObject);
begin
SMTP.Host:=’mail.58r.ru’; // адрес почтового сервера
SMTP.Port:=25; // порт по которому будет осуществляться подключение
SMTP.Username:=’test+58r.ru’; // логин пользователя
SMTP.Password:=’12345666′; // пароль пользователя
SMTP.AuthenticationType:=atLogin; // тип подключения к серверу – с авторизацией
with IdMessage do
begin
Body.Assign(Memo1.Lines); // передача данных из memo в компонент IdMessage, для последующей отправки
From.Text := ‘test@58r.ru’; // майл отправителя письма
Recipients.EMailAddresses := ‘test@58r.ru’; // майл получателя письма
Subject := ‘Programmersclub.ru’; // тема письма

end;

SMTP.Connect; // соединение с почтовым сервером
try
showmessage(’Произошло подключение к серверу’); // сообщение о удачном подключении к серверу
SMTP.Send(IdMessage); // отправка письма на сервер
finally
SMTP.Disconnect; // разрыв соединения
end; end;

Delphi исходники почтового клиента:

Когда вы откроете исходники, вы увидите 4 кнопки, каждому рассматриваемому варианту соответствует кнопка на форме, в memo вы сможете видеть текст письма, внизу формы размещено несколько label, в которых отображаются атрибуты письма. Для работы с сетью используются три Indy компонента IdPOP3, IdSMTP, IdMessage.

Скачать исходные коды почтовика

Похожие статьи

  • Проверка занятости логина на странице с помощью indy
  • Авторизация на mail.ru с помощью indy
  • Прием данных/отсылка в поток Indy10
  • idHTTP и кодировка
  • Парсер сайта на Делфи.
  • Авторизация “В контакте”
  • Пример авторизации на WordPress
  • Сохранение файла из интернета
  • Получить интернет страницу с кодировкой cp1251 в delphi 2010
  • Скачать файл с помощью indy и отобразить процесс скачивания на progressbar
Теги: Delphi | indy | интернет | программы








© Copyright "Клуб программистов" – материалы по Delphi и С++. Создание и продвижние сайта - Веб-сателлит.