获取procmail以回复更大的邮件

时间:2017-06-28 17:24:58

标签: procmail

我正在尝试回复大于特定大小的邮件,然后转发给其他用户。得到了这个,但没有任何反应。它似乎我只能在消息的末尾添加文本。

:0
* > 1000
{
  :0 fhw
  | cat - ; echo "Insert this text at the top of the body"
  :0
  | formail -rk
  | $SENDMAIL -t
}

2 个答案:

答案 0 :(得分:0)

目前尚不清楚究竟出现了什么问题,但如果您想在开头添加文字,则显然需要在echo之前cat,并在身体上工作(b) ,而不是标题(h)。

  :0 fbw
  | echo "Insert this"; cat -

我认为你可以通过在最后添加一些内容来技术上打破标题,但如果你想让它出现在正文中,它需要在它之前有一个颈部(换行符)。

:0 fhw
| cat -; echo; echo "Insert this"

还有一个sed语法允许更灵活的操作(sed寻址可以让你说出“在以>开头的第一行之前”之类的内容procmail里面sed命令行的换行是多毛的。作为一种解决方法,我经常使用一个字符串,然后插入它。(多毛的确切依赖于sed语法的细节,这些都不是标准的。实现似乎需要ai命令中的换行符。)

sedscript='1i\
insert this\
'
:0 fbw
| sed "$sedscript"

(如果你很幸运,你的sed会接受像sed '1i insert this'这样简单的东西。上面的变体似乎是我唯一可以在macOS上工作的变体,因此通常可能是* BSD。 )

另外,1000字节长的消息绝不大。我记得在我自己的收件箱中计算了大约4k的平均消息长度,但这是在人们开始使用HTML电子邮件客户端之前。根据您的入站拓扑,只有标头可以轻松超过1000个字节。

答案 1 :(得分:0)

使用sed帮了很多忙。

SEDSCRIPT='0,/^$/ s//\nLarge message rejected [Max=4MB]\n/'
MAILADDR=me@nowhere

:0
* > 4000000
* !^FROM_DAEMON
* !^X-Loop: $MAILADDR
| formail -rk -A "X-Loop: $MAILADDR" \
| sed "$SEDSCRIPT" \
| $SENDMAIL -t