exim переписать конверт-от только для одного маршрутизатора

Я просто поставил свое решение с помощью sed , даже если его просят специально для AWK, я считаю это решение более компактным и прямым:

GNU Sed (проверено в CentOS):

sed -n '1!p' addresses.csv | sed -r 's!^([0-9]*(\sbis|\ster)?),?(.*)$!\1,\3!g;s!(.*)([^,])(,[0-9]*)$!\1\2,\3!g'

OS-X / BSD Sed

sed -n '1!p' addresses.csv | sed -E 's!^([0-9]*( bis| ter)?),?(.*)$!\1,\3!g;s!(.*)([^,])(,[0-9]*)$!\1\2,\3!g'

Первая команда sed берет все строки, кроме первой (заголовок).

Для второго sed я использую замены:

^                : Starting text.
[0-9]*           : all numbers (0, 1, ... 99, 999, 99999999 and so on) 
( bis| ter)?     : optionally followed by " bis" or " ter" (notice the space before); group 2
,?           : optionally followed by a comma
(.*)$            : the rest of the string until the end ($) (group 3)

!\1,\3           : replaced by first group (number + extension) - comma - third group 

Обратите внимание, что вторая группа - это скобки для 'bis' и 'ter', а первая группа - это ([0-9 ] * (bis | ter) {0,1})

Вторая замена предназначена для нормализации запятых (если она не заканчивается ,, \ d , мы добавляем дополнительную запятую.

2
21.03.2019, 14:32
2 ответа

Может быть, самый простой способ — это использовать конвейер к сценарию/бинарному файлу, который будет выполнять произвольные преобразования:

begin routers
pass2script:
  driver    = accept
  transport = myscript
  condition = ## every distinction you need ##  

И транспорт:

begin transports
myscript:
  driver  = pipe
  command = /path/to/script 

Все сообщение, включая заголовки, пустую строку и тело, будет передано в stdinскрипта/двоичного файла. Сценарий должен прочитать stdinи после продолжения выполнить команду sendmail -tдля повторной отправки преобразованного сообщения локально. Самый простой сценарий, о котором я думаю, это следующий:

#!/bin/sh

cat /dev/stdin \
| sed '1 s/somelist@example.com/somelist-bounces@example.com/' \
| sendmail -t

####

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

Также вы должны убедиться, что у пользователя eximдостаточно прав для запуска скрипта и, особенно, команды sendmail -t. Возможно, вам нужно правильно настроить правила sudo.

-1
27.01.2020, 23:09

если вы хотите переписать отправителя конверта в маршрутизаторе, используйте действие «ошибки _в» в этом маршрутизаторе

errors_to = list-bounces@example.org

http://www.exim.org/exim-html-current/doc/html/spec_html/ch-generic_options_for_routers.htmlговорит частично:

If an address for which errors_to has been set ends up being delivered over SMTP, the envelope sender for that delivery is the errors_to value, so that any bounces that are generated by other MTAs on the delivery route are also sent there.

0
27.01.2020, 23:09

Теги

Похожие вопросы