Delphi — проверка почты (Часть 2)

Задача: Расширить возможности программы проверки почты, и добавить возможность проверять почту с использованием SSL (Secure Sockets Layer — уровень защищённых сокетов). И так определимся с заданиями которые расширят программу проверки почты:

  1. Добавить поддержку SSL для безопасного соединения.
  2. Проверить работоспособность почтовой программы на gmail.com (там используется SSL) и ukr.net (Без шифрования)

Инструментарий: Delphi XE, компоненты INDY v10, Библиотеки libeay32.dll и ssleay32.dll
Решение:
Предыдущая часть:
Проверка почты средствами Delphi — часть 1
В первой части мы создали программу, которая проверяет почту напрямую без поддержки шифрования. В данной части мы интегрируем поддержку шифрования. Приступим к реализации.

Для того чтобы была возможность использовать SSL соединение нужно в папку с проектом скопировать два файла libeay32.dll и ssleay32.dll , в них уже реализован тот функционал который нам необходим. Библиотеки libeay32.dll и ssleay32.dll можно скачать тут.
Открываем проект, который создан в первой части. Открываем главную форму и перемещаем на неё компонент IdSSLIOHandlerSocketOpenSSL (Рис. 1). Также перемести на форму еще несколько дополнительные элементов управления и настроим их в соответствии с табл. 1.

Рис.1 Выбор компонента с Tool Palette

Установим следующие параметры:

Табл. 1

Компонент  Свойство Значение  Описание
IdSSLIOHandlerSocketOpenSSL Name SSLHandler
CheckBox Name chkUseSSL Если переключатель включен – используем SSL соединение
Caption Использовать SSL
ComboBox Name cbSSLType В нем будет сохраняться тип SSL подключения sslvTLSv1 , sslvSSLv2…
Items sslvSSLv2
sslvSSLv23
sslvSSLv3
sslvTLSv1
ItemIndex 0
Button Name btnTest Кнопка для мгновенной проверки почты, исключительно для тестирования, запускает процедуру CheckMail, которая осуществляет подключение к серверу и проверяет   наличие почты.

В результате у нас получилась следующая форма Рис.2, Рис. 3

Рис. 3 Программа в редакторе форм

Рис. 2 Запущенная программа

Переходим в редактор кода и добавляем процедуру настройки SSL соединения, назовём ее SetupSSL. Код реализации приведен ниже:

procedure TfrmMain.SetupSSL;
begin
if chkUseSSL.Checked then //если включена опция использовать SSL
begin
IdPOP3.IOHandler := SSLHandler; //устанавливаем SSL Handler для IdPOP3
IdPOP3.UseTLS := utUseImplicitTLS; //использовать неявный TSL
//Устанавливаем тип SSL
case cbSSLType.ItemIndex of
0: SSLHandler.SSLOptions.Method := sslvSSLv2;
1: SSLHandler.SSLOptions.Method := sslvSSLv23;
2: SSLHandler.SSLOptions.Method := sslvSSLv3;
3: SSLHandler.SSLOptions.Method := sslvTLSv1;
else
raise Exception.Create('Выберите тип SSL');
end;
end
else
begin
IdPOP3.IOHandler := nil; //если не используем SSL - устанавливаем все по умолчанию
IdPOP3.UseTLS := utNoTLSSupport;
end;
end;

Добавляем объявление процедуры в секцию private класса главной формы:

private

function CheckMail(IP: TIdPOP3; User, Pass, Host: string; Port: Integer): String;
procedure SetupSSL;
public

Для того чтобы наша процедура SetupSSL заработала в существующем коде – нужно добавить ее вызов в функцию CheckMail, которую мы написали в первой части.

IP.Port:=Port; // порт
SetupSSL; // настройка SSL соединения
IP.Connect; // подключаемся

Дальше запускаем и проверяем работоспособность.
Проверяем почту на gmail.com со следующими настройками:

POP3: pop.gmail.com
Порт: 995

А также для аккаунта gmail.com должна быть включена возможность получать почту с помощью сторонних программ через POP3. На Рис.4,Рис.5 представлена работоспособность программы.

Рис. 4 – Проверка почты gmail.com

Рис. 5 – проверка почты ukr.net

PS: Программа проверки почты на Delphi теперь работает с поддержкой SSL. Тут есть одна неопределенность. Программа показывает общее количество писем, а не количество новых. Если будет время опишу как проверить количество новых писем.
Библиотеки libeay32.dll и ssleay32.dll можно скачать тут.
Исходники программы можно скачать на GitHub

Продолжение в 3-й части: Проверка почты средствами Delphi — часть 3

Delphi — проверка почты (Часть 2): 8 комментариев

    1. androschuk.a Автор записи

      По сути если мы говорим об одном и том же, тогда это не совсем папки а ярлыки, и скорее всего что в полученном сообющении должна быть какая то информация об этом. Но фильтровать на клиенте тоже не вариант.

      По теме нашел только как вычитать сами ярлыки (gmail labels):
      http://rest-examples.chilkat.io/gmail/delphiDll/chilkat_302.cshtml

      1. Sting_Napas

        Спасибо за ответ. Для уточнения: письма приходят во «входящие». Я хочу добавить папку, например, «work». Из «входящих» перетащить руками письма в «work» и программой обрабатывать письма только из «work», но не трогать письма во «входящие».
        Код из Вашей ссылки помогает определить эти самые «входящие» и «work»?

        1. androschuk.a Автор записи

          да, он вернет только список всех «папок». Но нужно смотреть в сторону заголовков самих писем, они должны содержать информацию в какой «папке» они находятся. Если вы используете Gmail, тогда лучше использовать rest api. https://developers.google.com/gmail/api/guides/?hl=RU

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