Назад | Перейти на главную страницу

Procmail - заменить "От" текстом из электронной почты

Я пытаюсь использовать 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. Я никогда не использую его, но он кажется действительно мощным. Он изменится только в заголовке письма, а не в теле.