Postfix: добавить/изменить текст электронного письма

Postfix: добавить/изменить текст электронного письма

Я настроил почтовый сервер Postfix для своей локальной сети, который используетПочтовый штемпелькак smarthost. Это на самом деле работает нормально. Но мой принтер/копир Canon отправляет письма без тела письма, а только с вложениями.

Это приводит к ошибке на стороне почтового штемпеля:ErrorCode: '300', Message: 'Provide either email TextBody or HtmlBody or both.'.

Поэтому я хотел бы добавить правило в свой postfix, чтобы добавлять TextBody к почте, если он отсутствует, перед пересылкой на смартхост. Есть идеи?

решение1

У меня была та же проблема с Postmark для некоторых писем в определенной паре from/to. Используя почтовый сервер postfix, я использовал функцию disclaimer в altermime, чтобы скопировать строку темы в тело, и применил некоторую логику "if", чтобы altermime запускался только тогда, когда письмо было from/to с указанных адресов.

Существует множество статей о том, как настроить altermime, вот одна из них: https://www.howtoforge.com/how-to-automatically-add-a-disclaimer-to-outgoing-emails-with-altermime-postfix-on-debian-squeeze

Статья выше для Debian, но также в значительной степени работает и на производных RedHat. Вам нужно будет установить саму программу с помощью dnf (или yum) и используя репозиторий EPEL.

Если вам нужно просто статичное тело (как в случае с отказом от ответственности), то ничего другого делать не нужно, кроме как применить некоторую логику if, если вы не хотите, чтобы текст применялся к каждому электронному письму.

Если вы хотите добавить строку темы в тело письма, то трюк здесь заключается в том, чтобы вывести строку темы во временный файл, а затем использовать этот файл в качестве файла отказа от ответственности в скрипте.

Так:

Возьмите строку темы и выведите ее во временный файл:

subject=`grep -m 1 "Subject:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1 | cut -d " " -f 2-`
echo -e "\r\n$subject\r\n" >sub.$$

Затем, когда скрипту требуется имя файла, просто используйте sub.$$, например

/usr/bin/altermime --input=in.$$ \
                   --disclaimer=sub.$$ \
                   --disclaimer-html=sub.$$ \
                   --xheader="X-SpecialContent-Header: TextAdded" || \
                     { echo Message content rejected; exit $EX_UNAVAILABLE; }

Наконец, не забудьте удалить временный файл — в верхней части скрипта есть строка, которая удаляет входной файл, просто расширьте эту строку, чтобы удалить файл sub.$$:

trap "rm -f in.$$ sub.$$" 0 1 2 3 15

Связанный контент