Доброе время суток. Я начинаю цикл статей которые направлены на работу по созданию почтового клиента с помощью компонент Indy.
Для начала определимся с инструментарием: при написании программы я использовал Delphi 2010 (Delphi 2009) компоненты Indy v10
В этой части мы выполним следующие задания:
Раз определились с планом действий - приступим к следующему этапу - созданию. Создаем новый проект, и размещаем на форме компонент idPOP3, который находиться на закладке IndyClients.
Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения, а именно:
Результат можно просмотреть на Рис.1.
В результате мы получим следующий вид окна (Рис.2.):
Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически генерируется обработчик события OnTimer:
PS: Если есть пожелания - пишите, с удовольствием выслушаю и по возможности реализую.
Продолжение во 2-й части: Проверка почты средствами Delphi - часть 2
Для начала определимся с инструментарием: при написании программы я использовал Delphi 2010 (Delphi 2009) компоненты Indy v10
В этой части мы выполним следующие задания:
- Проверка почты на наличие сообщений;
- Возможность задания периода проверки почты;
- Вывод уведомлений при наличии каких либо сообщений;
Раз определились с планом действий - приступим к следующему этапу - созданию. Создаем новый проект, и размещаем на форме компонент idPOP3, который находиться на закладке IndyClients.
Для того чтобы проверить почту нам необходимо передать компоненту idPOP3 некоторые параметры для подключения, а именно:
UserName – адрес электронной почты в формате (xxx@xxx.xx)Размещаем на форме компонент GroupBox из вкладки Standard – для группирования полей. Для того чтобы программа была более "гибкой" - поместим 4 компонента Edit и Label, они находятся на закладке Standard. Установим свойства компонентов, как показано в Табл.1.
Password – пароль к данному почтовому ящику
Host – POP3 сервер (pop.mail.ru; pop3.ukr.net)
Port – порт (по умолчанию 110)
Табл.1.
Компонент | Свойство | Значение | Описание |
Form1 | Name | MainForm | |
GroupBox1 | Caption | Настройки ящика | |
Name | SettingsGroupBox | ||
Label1 | Caption | Адрес | |
Name | AdressLabel | ||
Label2 | Caption | Пароль | |
Name | PassLabel | ||
Label3 | Caption | POP3 сервер | |
Name | Pop3Label | ||
Label4 | Caption | Порт | |
Name | PortLabel | ||
Edit1 | Text | Адрес | |
Name | AdressEdit | ||
Edit2 | Text | Пароль | |
Name | PassEdit | ||
PasswordChar | * | ||
Edit3 | Text | POP3 сервер | |
Name | Pop3Edit | ||
Edit4 | Text | Порт | |
Name | PortEdit | ||
NumbersOnly | true | Можно вводить только числа | |
idPop31 | Name | idPop31 |
Результат можно просмотреть на Рис.1.
Рис. 1.
Что касается 2-го задания. Нам необходимо еще разместить на форме компонент Timer, который находиться на закладке System. Для задания интервала проверки, нам необходимо добавить на форму поле ввода Edit (панель Standard), компонент Memo для вывода системных сообщений и кнопку (Button на панели Standard) для подтверждения введеной информации. Установим для них следующие свойства (Табл. 2):
Табл. 2
Компонент
|
Свойство
|
Значение
|
Button1 | Caption | Установить |
Name | OkBtn | |
Memo1 | Lines | |
Name | ResultMemo | |
Edit5 | Text | |
Name | IntervalEdit | |
NumbersOnly | true | |
Timer1 | Enabled | false |
Name | CheckTimer |
В результате мы получим следующий вид окна (Рис.2.):
Рис. 2.
Напишем функцию присвоения значений таймера, его активацию и вывод соответствующих сообщений в ResultMemo.function TMainForm.StartTimer(T:TTimer;int:Integer):string;Обьявим данную функцию в приватной секции главной формы:
var
sec:Integer; // объявляем переменную для записи в неё количество мсек.
begin
T.Enabled:=false; //остановка таймера
sec:=int*60000; // определяем интервал проверки
T.Interval:=sec; // задаём интервал проверки
T.Enabled:=true; //запускаем таймера
Result:='Почта будет проверена через '+IntToStr(int)+' мин.'; // передача обратно оповещения
end;
privateДанная функция задает настройки таймера и возвращает строку с сообщением, через какой период будет проверена почта.
{ Private declarations }
function StartTimer(T:TTimer;int:Integer):string;
Дальше создадим код для события onClick кнопки OkButton (для того чтобы создать данное событие необходимо два раза кликнуть на кнопку, или перейти в Object Inspector, открыть закладку Events, и два раза кликнуть по пустому полю возле названия onClick): После создания события автоматически сгенерируется следующий код:
Используем ранее написанную функцию, для этого передадим необходимые параметры:procedure TMainForm.OkBtnClick(Sender: TObject);beginend;
procedure TMainForm.OkBtnClick(Sender: TObject);Рассмотрим более детально: ResultMemo.Lines.Add(); - добавляем запись в ResultMemo которую возвращает написанная нами процедура StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)).
begin
ResultMemo.Lines.Add(StartTimer(CheckTimer,StrToInt(IntervalEdit.Text)));
end;
Всё очень просто мы останавливаем таймер, в том случае если он запущен, определяем время его срабатывания, записываем данное время в интервал и запускаем таймер.
Теперь перейдём непосредственно к таймеру. Два раза кликаем левой кнопкой мыши на компонент Timer, после чего вы перейдёте в редактор кода, при этом автоматически генерируется обработчик события OnTimer:
procedure TMainForm.CheckTimerTimer(Sender: TObject);Дальше реализуем процедуру для получения писем:
begin
end;
function TMainForm.CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;И обявим ее в приватной секции главной формы:
var
NumOfMsgs:Integer; // Количество писем
begin
try
IP.Username:=User; // адрес электронной почты в формате (xxx@xxx.xx)
IP.Password:=Pass; // пароль к данному почтовому ящику
IP.Host:=Host; // POP3 сервер (pop.mail.ru; pop3.ukr.net)
IP.Port:=Port; // порт
IP.Connect; // подключаемся
if IP.Connected then // если подключение прошло успешно
begin
// записываем в NumOfMsgs количество писем
NumOfMsgs := IP.CheckMessages;
// Возвращаем результат
Result:='Подключение прошло успешно!'+#13#10;
Result:=Result+'У вас '+IntToStr(NumOfMsgs)+' сообщений';
end
except // Если произошла ошибка- возвращаем текст ошибки
on E:Exception do Result:='Ошибка подключения! '+E.Message;
end;
IP.Disconnect; // Отключаемся
end;
privateПереходим в обработчик события OnTimer и компонента CheckTimer и пишем следующий код для того чтобы почта проверялась при активации таймера:
...
function CheckMail(IP:TIdPOP3;User,Pass,Host:string;Port:Integer):String;
procedure TMainForm.CheckTimerTimer(Sender: TObject);Теперь посмотрим что же получилось, заполняем все поля (настройки для получения почты можно взять на почтовых серверах, где у вас зарегистрирован почтовый ящик) (Рис.3):
begin
ResultMemo.Lines.add(CheckMail(IdPOP31,AdressEdit.Text,PassEdit.Text,Pop3Edit.Text,StrToInt(PortEdit.Text)));
end;
Рис.3.
Тестирование прошло успешно. Сегодня попробую протестировать на других почтовых серверах.PS: Если есть пожелания - пишите, с удовольствием выслушаю и по возможности реализую.
Продолжение во 2-й части: Проверка почты средствами Delphi - часть 2