Private KeeperPrivate Keeper
in-Line Kit

Почтовый модуль

Авторизация в почте, поиск и чтение писем, идентификаторы, результаты действий и безопасная обработка ошибок.

Почтовый модуль выполняет четыре отдельных действия: входит в ящик, ищет письма, получает содержимое выбранного письма и при необходимости удаляет его. В Студии этот тип запроса называется Mail Connector. Действия должны стоять в проекте именно в том порядке, в котором нужны их результаты.

Порядок работы

1. Авторизуйтесь

Первое действие получает логин и пароль, определяет почтовую службу и открывает соединение. Без успешной авторизации поиск, обзор и удаление не имеют рабочей почтовой сессии.

Поиск заменяет прежний список идентификаторов. Готовый список становится доступен через |MCIDS|, по одному идентификатору на строку.

3. Выберите одно письмо

Обзор принимает один идентификатор. Если поиск вернул несколько строк, явно выберите нужную, например первую через |GETLINE|.

4. Прочитайте и проверьте результат

После обзора тело письма находится в |MCMSGFIELD|. После каждого действия отдельно проверьте |MCSTATUS|; результат предыдущего действия не подтверждает успешность следующего.

Авторизация и последующие действия используют состояние одного текущего запуска проекта. Новый запуск начинает новую почтовую сессию, поэтому нельзя рассчитывать на авторизацию, выполненную в прошлой проверке или для другой входной строки.

Команды результата

|MCSTATUS|

Возвращает описание результата последнего действия почтового модуля. Пустая строка обычно означает завершённое действие; непустое значение нужно обработать явно.

|MCIDS|

Возвращает идентификаторы последнего поиска, по одному на строку. Каждый новый поиск сначала очищает прежний список.

|MCMSGFIELD|

Возвращает тело последнего письма, которое удалось открыть действием «Обзор письма». Перед новым обзором прежнее содержимое очищается.

Эти команды читают состояние почтового модуля, а не выполняют действие сами. Например, |MCIDS| не запускает поиск, а только возвращает результат уже завершившегося действия «Поиск писем».

Настройка действий

Обязательные поля

Выберите действие «Авторизация» и заполните:

  • Логин — полный адрес ящика вместе с доменом; начальное значение поля — |LOGIN|;
  • Пароль — пароль от ящика; начальное значение поля — |PWD|;
  • Игнорировать ошибки соединения — обычно «Нет», чтобы сетевая ошибка останавливала текущую ветку как ошибка.

Домен берётся из логина. Значение alex без части после @ не позволяет выбрать службу и даёт результат Домен не обнаружен; значение [email protected] содержит домен example.test.

Успех в русской версии проверяется сравнением с пустой строкой:

|MCSTATUS||=|

Пустая правая часть здесь намеренна: оператор |=| сравнивает результат авторизации с пустой строкой.

Выбор одного идентификатора

|MCIDS| является многострочной строкой. Она удобна для вывода и дальнейшего разбора, но не является одним идентификатором.

Работает

(|GETLINE||MCIDS|,1|GETLINE|) извлекает первую строку и передаёт обзору один идентификатор.

Ошибка

Прямая подстановка |MCIDS| при нескольких результатах передаёт сразу весь список; обзор удаляет переводы строк и получает склеенное значение, которого нет в ящике.

Если нужно обработать все найденные письма, разберите |MCIDS| на строки и повторяйте обзор отдельно для каждой строки. Не передавайте весь список одному действию обзора или удаления.

Результаты действий

В русской версии |MCSTATUS| возвращает одно из следующих значений. Текст переводится вместе с интерфейсом программы, поэтому проект, который сравнивает точную фразу, должен выполняться с тем же языком.

ЗначениеЧто произошлоЧто делать дальше
""Действие завершилось без описанной ошибкиИспользовать результат действия; для удаления учитывать отдельное ограничение выше
Домен не обнаруженВ логине нет распознаваемого доменаПроверить полный адрес ящика и настройки службы
Ошибка соединенияНе удалось выполнить сетевое или почтовое соединениеОтправить запуск в ошибку либо обработать значение после явного разрешения продолжить
Страница не была получена корректноДействие выполнено без рабочей авторизации либо служба вернула неожиданный ответВернуться к авторизации и проверить порядок действий
Плохой аккаунтСлужба отвергла учётные данные либо настройки домена признаны нерабочимиОтнести входную строку к неверным данным, если соединение само по себе исправно
Писем не найденоПоиск завершился без совпаденийЗавершить ветку без обзора письма
Письма не найденоПереданный идентификатор не существуетПроверить выбор одной строки из свежего `
Письмо пусто, ID - …Письмо получено, но его тело не удалось извлечьСохранить исходный ответ для разбора и не считать письмо прочитанным успешно
Успех

|MCSTATUS||=| проверяет пустой результат текущего действия.

Есть описание

|MCSTATUS||<>| проверяет, что почтовый модуль вернул непустое описание, после чего отдельные определения могут различить ожидаемые исходы.

Ошибка соединения

При значении «Игнорировать ошибки соединения: Нет» результат Ошибка соединения отправляет текущий запуск в ветку ошибки. Это подходящее начальное поведение: проект не продолжает поиск или обзор без рабочего соединения.

Если выбрать «Да», проект продолжится, а фраза Ошибка соединения останется в |MCSTATUS| для ручного определения. Такое продолжение имеет смысл только тогда, когда в проекте уже есть отдельная ветка для этой точной ошибки.

Остальные непустые результаты, например Писем не найдено, сами по себе не определяют хороший или плохой итог входной строки. Добавьте определения после каждого почтового действия и явно решите, куда должен перейти каждый ожидаемый результат.

Выбор почтовой службы

Почтовая служба определяется по домену полного логина.

Семейство Mail.ru

Домены mail.ru, mail.ua, list.ru, inbox.ru и bk.ru используют встроенный путь Mail.ru с авторизацией и действиями через сайт службы.

Настроенный сервер

Для домена из общих настроек используются сохранённые адрес сервера и порт.

Неизвестный домен

При первом обращении создаётся запись imap.ДОМЕН с портом 993; её нужно исправить в общих настройках, если служба использует другой адрес или порт.

Домены Yandex распознаются отдельно. Авторизация для них открывает почтовое соединение по серверным настройкам, поэтому адрес и порт должны быть заданы так же точно, как для остальных доменов IMAP.

В общих настройках почтового модуля можно добавить свой сервер, изменить автоматически созданную запись и задать исключение для домена. Сделайте это до массового запуска: неверно угаданный адрес imap.ДОМЕН сначала даст ошибку соединения и не должен становиться молчаливой заменой настоящих настроек службы.

Полный пример

Пример безопасно заканчивается чтением письма и не удаляет данные. Пусть входная строка содержит почтовый адрес и пароль, а в проекте заранее создана динамическая переменная MailBody.

1. Действие «Авторизация»

Укажите |LOGIN| в поле логина и |PWD| в поле пароля. В определении успеха используйте:

|MCSTATUS||=|

При непустом результате к следующему действию не переходите.

Укажите [email protected] как поисковую строку и выберите «Искать только непрочитанные». Успех снова проверяется по пустому |MCSTATUS|; результат Писем не найдено завершает эту ветку без обзора.

3. Действие «Обзор письма»

В поле идентификатора укажите первую строку списка:

(|GETLINE||MCIDS|,1|GETLINE|)

Выполняйте обзор только после успешного поиска.

4. Сохранение тела

После пустого |MCSTATUS| сохраните тело письма в Скрипт-боксе:

|DV|[MailBody] = |MCMSGFIELD|

MailBody теперь содержит тело первого найденного письма и может использоваться следующими действиями этого же потока.

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

Исходные данные соединения

Для диагностики после почтового действия также доступны обычные переменные запроса:

  • |RESPONSE| содержит последний исходный ответ или данные, которые почтовый модуль передал как ответ текущего действия;
  • |HEADERS| содержит последние заголовки сайта либо строки ответа почтового сервера;
  • |COOKIES| содержит cookie встроенного пути через сайт и может быть пустым при работе через IMAP.

Используйте эти значения для разбора конкретной ошибки, а основной ход проекта стройте на |MCSTATUS|, |MCIDS| и |MCMSGFIELD|: их назначение одинаково для почтовых действий, тогда как вид исходного транспорта зависит от службы.