Страницы: 1
RSS
Регулярка по сбору e-mail
 
Задача: извлечь все e-mail из тела письма и сохранить их в определенную папку адресной книги.
Не получается: вытаскивается только первый e-mail из тела письма и на этом всё. До прочих не доходит и соответственно в адресную они не попадают.

Сделано все так: создано правило сортировки, которое запускается по горячей клавише
Общие
Условие: Любое письмо
Действия: Добавить адреса из Message Body в группы “&&”
Детализация данной настройки:
Поля заголовка, откуда добавляются адреса: везде галка снята
Добавить адреса из текста письма, используя шаблон:
%REGEXPTEXT="[a-zA-Z0-9._%+-]+@+[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}"
Добавить адреса в эти группы: &&

В результате работы регулярки в адресную книгу в группу && добавляется только первый e-mail из текста сообщения даже если в письме их сотни. Почему так не ясно. Это первый опыт с регулярками и возможно для знающего человека ошибка очевидна.

Скрытый текст
Изменено: Игорь Акулюшин - 16.10.2021 10:05:08 (опечатка в названии темы)
 
Обновлённая версия 9.4.5.
Раньше извлекался только первый e-mail, а теперь e-mails по регулярке из тела письма вообще не собираются.
Н-да, печалька...
Изменено: Игорь Акулюшин - 01.11.2021 10:56:31
 
Невозможно просто и легко сохранить в адресную книгу все адреса e-mail, включенные в тело письма. Можно экспортировать только один адрес. Таким образом, всю задачу следует разбить на два этапа:

- Экспорт всех адресов из тела письма в текстовый файл (по одному адресу в строке). Эту операцию можно выполнить с помощью фильтра, запускаемого по горячей клавише.

- Импорт адресов из текстового файла в адресную книгу (в книге уже есть встроенные функции для импорта адресов из файла).

К сожалению, Вы не можете использовать простое регулярное выражение для извлечения адресов из сообщений, но используйте рекурсию в быстрых шаблонах. Для этого определите два шаблона (например, в группе общих шаблонов).

1. Шаблон с именем «adr» предварительно определяет переменные, используемые в операции удаления адреса, и вызывает рекурсивный шаблон. Он имеет следующий вид:
Код
%_MailBody(%OText)%-
%_MailAddr="%SetPattRegExp='([_\w\-\.\+]+@([_\w\-]+(\.[_\w\-]+)+))'%-
%RegExpMatch(%_MailBody)"%-
%-
%IF:"%_MailAddr"<>""%-
:%-
"%_Att_Items='1:%_MailBody'%-
%Qinclude(adr2)"%-

2. Второй шаблон «adr2» работает рекурсивно (вызывает сам себя, пока не найдет последний адрес):
Код
%If:"%-
%SetPattRegExp='(?i)([_\w\-\.\+]+@([_\w\-]+(\.[_\w\-]+)+))'%RegExpMatch(%_Att_Items)"<>""%-
:"%-
%SetPattRegExp='(?im)^(\d+):\s*(.*?)(\s|<)*([_\w\-\.\+]+@([_\w\-]+(\.[_\w\-]+)+))(.*)'%-
%RegExpBlindMatch(%_Att_Items)%-
%SubPatt(4)
%-
%_Curr_No='%SetPattRegExp=""^(\d+):""%RegExpMatch(%_Att_Items)'%-
%_Next_No(%Calc='1+%_Curr_No')%-
%SetPattRegExp='(?im)^(\d+):\s*(.*?)(\s|<)*([_\w\-\.\+]+@([_\w\-]+(\.[_\w\-]+)+))(.*)'%-
%RegExpBlindMatch(%_Att_Items)%-
%_Att_Items(%_Next_No:%SubPatt(7))%-
%-
%Qinclude(adr2)"%-
:"%-
%SetPattRegExp='(?im)^(\d+):\s*(.*?)(\s|<)*([_\w\-\.\+]+@([_\w\-]+(\.[_\w\-]+)+))(.*)'%-
%RegExpBlindMatch(%_Att_Items)%-
%SubPatt(4)"%-
Определив эти два шаблона, создайте фильтр, который будет экспортировать письмо в текстовый файл, используя очень простой шаблон:
Код
%QInclude(adr)%-

Импорт адресов в вашу книгу не должен быть проблемой.
Изменено: Zygmunt Wereszczyński - 26.01.2022 01:46:45
Страницы: 1