Доброе время суток. Я начинаю цикл статей которые направлены на работу по созданию почтового клиента с помощью компонент 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
17 комментариев:
Как это использовать на Yandex.ru ?
Очень просто нужно перейти на страницу яндекса и посмотреть настройки почты для Outlook. И так для каждого почтового сервера.
Для яндекса настройки следующие:
Адрес: ваш емейл
Пароль: пароль к вашей почте
POP3 сервер: pop.yandex.ru
Порт: 110
Сегодня проверял, все работает.
На GMail не работает...(безопосное соединение на спец. порт).
Само собой, нужно дописать поддержку SSL. Сейчас очень занят, когда освобожусь обязательно опишу как и что делается в 2-й части статьи.
Подпишитесь на RSS и будете в курсе событий.
А хде продолжение
Продолжение обязательно будет. Время выхода точно не скажу.
Классика жанра - продолжения так и не последовало? :)
К сожалению нет, но надежда все таки есть
Александр! Вы обещали продолжить! ГДЕ? КОГДА?
Напишите пожалуйста какое именно направление Вас интересует.
Поддержка SSl, хотя-бы. Минимальная база данных для нескольких почтовых ящиков, экономное поддержание актуального состояния почты. Лично мне интересно все :)
добрый день. имею вопросик по программе проверки/отправки почты из delphi и чтение присобаченных файлов с занесением в таблицу oracle.
как можно связаться по e-mail иди через соц.сети?
Oleksandr Androschuk, как можно с вами связаться по e-mail или соц.сети?
Google профиль:
http://www.google.com/profiles/107939711914675766908
Написал новую часть
http://androschuk.blogspot.com/2013/03/delphi-2.html
Обещанного 7 лет ждут
Блог переехал, новый адрес mirsovetov.net
Отправить комментарий