
Я настроил почтовый сервер 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