Проверка почты средствами 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 человек ! Подписаться



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

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

Срочно нужен задний бампер ХЕНДАЙ? 08 Апр 2014 в 16:14 #
Срочно нужен масляный фильтр HYUNDAI?
Александр. А. 30 Мар 2014 в 14:39 #
Уважаемые пользователи Автор статьи выложил дальнейшее продолжение на сайте mirsovetov точка net
Юрий 11 Ноя 2013 в 06:37 #
"Ругается при комплияции на IdPOP31.Username := Edit1.Text;"

Помогло: IdPOP31.UserID := Edit1.Text;
Юрий 11 Ноя 2013 в 06:01 #
Ругается при комплияции на IdPOP31.Username := Edit1.Text;
Курсор стоит перед .Username
Подскажите, что ему нужно (
truae 14 Фев 2013 в 00:00 #
Разобрался! Все работает, хост можно прописывать и по IP.

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