Проверка почты средствами Delphi

Опубиковано: 20.12.2009 г., автор: , просмотров: 41752

Delphi уроки - проверяем почту

В этом уроке мы напишем программу для проверки почты.
Первое что нам надо сделать, это определиться с заданиями  которые нужно чтобы выполняла данная программа. И так:

  1. Проверка почты
  2. Возможность задания периода проверки почты
  3. Вывод уведомлений при получении новых писем

И так начнём. Для начала нам нужно создать новый проект и  поместить на фору компонент idPOP3,который находиться на закладке IndyClients. Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения:
Username – адрес электронной почты в формате (xxx@xxx.xx)
Password – пароль к данному почтовому ящику
Host – POP3 сервер (pop.mail.ru; pop3.ukr.net)
Port – порт (по умолчанию 110)
Размещаем на форме компонент GroupBox из вкладки Standard – для группирования полей. Для того чтобы программа была более гибкой -  поместим 4 компонента Edit и Label, они находятся на закладке Standard. Установим свойства компонентов, как показано в Табл.1.

Табл.1.

Компонент

Свойство

Значение

Описание

GroupBox1

Caption

Настройки ящика

 

Label1

Caption

Адрес

 

Label2

Caption

Пароль

 

Label3

Caption

POP3 сервер

 

Label4

Caption

Порт

 

Edit1

Text

 

Адрес

Edit2

Text

 

Пароль

 

PasswordChar

*

 

Edit3

Text

 

POP3 сервер

Edit4

Text

 

Порт

 

NumbersOnly

true

Можно вводить только числа

Результат можно просмотреть на  Рис.1.
delphi почта
Рис.1.

Для того чтобы программа проверяла через определённо время наличие писем – необходимо поместить на форму компонент Timer, который находиться на закладке System. Для задания интервала проверки, нам необходимо добавить на форму кнопку (Button на панели Standard), поле ввода Edit (панель Standard) и компонент Memo для вывода системных сообщений. Установим для них следующие свойства:

Компонент

Свойство

Значение

Button1

Caption

Установить

Memo1

Lines

 

Edit5

Text

 

 

NumbersOnly

true

Timer

Enabled

false

В результате мы получим следующий вид окна (Рис.2.):
почта Delphi
Рис.2.

Дальше создадим код для события onClick кнопки Button1(для того чтобы создать данное событие необходимо два раза кликнуть на кнопку, или перейти в Object Inspector перейти на закладку Events, и два раза кликнуть по пустому полю возле названия onClick): После создания события автоматически сгенерируется следующий код:

procedure TForm1.Button1Click(Sender: TObject);
begin
end;

После его редактирования мы получим следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
sec:Integer;    // объявляем переменную для записи в неё количество мсек.
begin
Timer1.Enabled:=false;      //остановка таймера
sec:=StrToInt(Edit5.Text)*60000;  // определяем интервал проверки
Timer1.Interval:=sec;       // задаём интервал проверки
Timer1.Enabled:=true;       //запускаем таймера
Memo1.Lines.Add('Почта будет проверена через '+Edit5.Text+' мин.');
// Вывод оповещения в Memo
end;

Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически сгенерируется обработчик события OnTimer:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;

Реализуем код для получения писем:

procedure TForm1.Timer1Timer(Sender: TObject);
var
NumOfMsgs:Integer;  // Количество писем
begin
try
IdPOP31.Username:=Edit1.Text;   // адрес электронной почты в формате (xxx@xxx.xx)
IdPOP31.Password:=Edit2.Text; //  пароль к данному почтовому ящику
IdPOP31.Host:=Edit3.Text;     // POP3 сервер (pop.mail.ru; pop3.ukr.net)
IdPOP31.Port:=StrToInt(Edit4.Text);     // порт
  IdPOP31.Connect;     // подключаемся
if IdPOP31.Connected then      // если подключение прошло успешно
begin
NumOfMsgs := idpop31.CheckMessages; 
// записываем в NumOfMsgs количество писем
// выводим сообщения в Мемо
Memo1.Lines.Add('Подключение прошло успешно!');
Memo1.Lines.Add('У вас '+IntToStr(NumOfMsgs)+' сообщений');
end
except // Если произошла ошибка- выводим её в Memo1
on E:Exception do Memo1.Lines.Add('Ошибка подключения! '+E.Message);
end;
IdPOP31.Disconnect;       // Для отключения
end;

Данная часть кода выполняет следующие действия:

  1. Передает введённые нами параметры с Edit1.. Edit4 в IdPOP31
  2. Подключается к серверу
  3. Если подключение прошло успешно – выводит в Memo1 количество сообщений, иначе выводит сообщение с ошибкой подключения.
  4. Отключаемся от сервера

Результат работы можно посмотреть на скриншотах ниже:

pop3 delphi
Рис.3. – Удачное подключение с выводом количества писем

mail почта delphi smtp

Рис.4. – Неудачное подключение с ошибкой

Этот вариант рассчитан для начинающих. Конечно можно включить фантазию и доработать программу. Добавив сохранение параметров в файл, возможность добавления много почтовых ящиков для проверки, возможность сворачивания в трей, вывод уведомлений  - когда есть новые сообщения и много чего другого. Если кому интересна данная тематика – с радостью продолжу.

Спасибо за внимание.

Скачать исходник (Проект написан на Delphi 2010)

Дописываю материал и уезжаю в во Вьетнам, а вы пока осваивайте уроки по программированию ну, а если тоже интересуют поездки за границу, тогда советую вам отдых во вьетнаме по минимальным ценам путешествуем друзья!

Хотите участвовать в конкурсах и постепенно вливаться в нашу команду ?!
Тогда прямо сейчас подписывайтесь на бесплатную мультимедийную рассылку сайта delphiexpert.ru
Нас уже больше чем 4000 человек ! Подписаться



Похожие материалы

Последние из рубрики

Игорь 20 Сен 2019 в 21:57 #
Я вот как работал в windows XP и со средой седьмой версии, так и работаю....
Вот эти вещи действительно проверены в бою....
Игорь 20 Сен 2019 в 21:55 #
Мало того, что версия 2010-го года выгладит ужасно, как сжатый комок всех форм, ,,,,так она ещё и занимает почти гигабайт жесткого диска, у меня нет слов
Изуродовали такую красивую среду....
Игорь 20 Сен 2019 в 21:51 #
Вышла новая версия среды,- все, переходим на неё!
Скоро выйдет 2030 или 3130 вы тоже будете прыгать?
Как правило, с каждой последующей версией что то усовершенствуется,- исправляются предыдущие ошибки, добавляются новые возможности... Но как показывает практика, вещи которые казалось бы должны упростить нам жизнь- делают нас более ленивыми...
Игорь 20 Сен 2019 в 21:46 #
Владимир, не вы ли говорили, что для вас среда Delphi 7 - проведена в бою?
Тогда почему вы пишите на 10 ?
Чего там такого нового?- новый RTTI или дженерики?
10 лет писали программы без всяких там дженериков и все было нормально, но сейчас вдруг нас переклинить...
2-минутный Правило пиротехника краснодар 16 Июн 2019 в 17:27 #

ОтменитьДобавить комментарий