我已经为我的本地网络设置了一个 Postfix 邮件服务器,它使用邮戳作为智能主机。这实际上工作正常。但我的佳能打印机/复印机发送的邮件没有邮件正文,只有附件。
这会导致 Postmark 端出现错误:ErrorCode: '300', Message: 'Provide either email TextBody or HtmlBody or both.'.
因此,我想在我的 postfix 中添加一条规则,如果邮件中缺少 TextBody,则在转发到智能主机之前添加该邮件。有什么想法吗?
答案1
对于某些特定发件人/收件人对的电子邮件,我在使用 Postmark 时也遇到了同样的问题。使用 Postfix 邮件服务器时,我使用 altermime 中的免责声明功能将主题行复制到正文中,并应用了一些“if”逻辑,以便 altermime 仅在电子邮件发件人/收件人为指定地址时运行。
关于如何设置 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