Я пытаюсь использовать Procmail для фильтрации почты, поступающей на мой канал тикетов в WHMCS. Что касается трубопроводов, то он работает нормально. Но электронные письма из модуля живого чата Zopim на сайте нуждаются в фильтрации и редактировании, прежде чем они попадут в скрипт для WHMCS.
Электронные письма, когда они приходят, выглядят так:
To: email@domain.com
From: Zopim <noreply@zopim.com>
Subject: Offline Message from Visitor xxxx: xxx
From: Visitor xxxxxx <you@you.com>
URL: http://www.domain.com
xxxxxxx
----
Zopim
http://www.zopim.com
И вот моя настройка файла procmail rc:
:0H
* ^From: Zopim.*noreply@zopim.com
| sed -e 's/^From: Zopim.*/From: me@me\.com/' | /usr/bin/php -q /var/www/pipe/pipe.php
Теперь все работает нормально, он находит From
поле и заменив его на me@me.com
. Проблема в том, что я хочу каким-то образом получить текст из электронного письма, в котором говорится:
From: Visitor xxxxxx <you@you.com>
И поместите это выше в заголовок, где From
находится в, так что по существу он будет исходить от посетителя, а не от зопима. Вот где моя проблема, я не могу понять, используя sed или другую программу, как установить эту строку в качестве переменной и заменить ее выше, или просто использовать sed для перемещения строк.
Если предположить, что эти электронные письма действительно регулярные, так что первые From:
в теле всегда есть адрес, который вы хотите извлечь, попробуйте что-то вроде этого:
:0 # The H flag is the default, so not specifying it explicitly
* ^From: Zopim.*<noreply@zopim\.com>
{
:0B # examine body only, capture From:
* ^From: \/[^ ].*$
{ VISITOR=$MATCH }
:0
| formail -I "From: $VISITOR" \
| /usr/bin/php -q /var/www/pipe/pipe.php
}
Традиционно регулярное выражение должно охватывать вкладки, а также пробелы в пробелах, но я предполагаю, что если ваш ввод сгенерирован машиной, это будут все пробелы (или все вкладки, и в этом случае вам нужно будет внести необходимые изменения).
В примерах procmail для этого есть инструмент: formail
. Увидеть справочная страница procmail. Я никогда не использую его, но он кажется действительно мощным. Он изменится только в заголовке письма, а не в теле.