对所有传入邮件执行bash命令(后缀)

对所有传入邮件执行bash命令(后缀),bash,postfix-mta,Bash,Postfix Mta,我想在每个传入的后缀邮件的正文上执行一个命令 sed ':a;N;$!ba;s/=\n//g' /path-to/message-file | sed 's/</\n\</g' | sed -r '/'"$(sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' whitelist | past

我想在每个传入的后缀邮件的正文上执行一个命令

sed ':a;N;$!ba;s/=\n//g' /path-to/message-file | sed 's/</\n\</g'  | sed -r '/'"$(sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' whitelist | paste -s -d '|')"'/! s/http/httx/g'
邮件中没有任何更改。 我得到以下系统日志:

Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 3FFDF23CB5F: from=<test@gmail.com>, size=4358, nrcpt=1 (queue active)
Apr 13 15:14:08 rs211184 postfix/pipe[7504]: 116E523CA8C: to=<example@example.de>, relay=filter, delay=0.2, delays=0.16/0/0/0.04, dsn=2.0.0, status=sent (delivered via filter service)
Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 116E523CA8C: removed
Apr 13 15:14:08 rs211184 postfix-local[7522]: postfix-local: from=test@gmail.com, to=example@example.de, dirname=/var/qmail/mailnames
Apr 13 15:14:08 rs211184 postfix/pipe[7521]: 3FFDF23CB5F: to=<dsehlhoff@lcdev1.de>, relay=plesk_virtual, delay=0.02, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered via plesk_virtual service)
Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 3FFDF23CB5F: removed
Apr 13 15:14:08 rs211184后缀/qmgr[7492]:3FFDF23CB5F:from=,size=4358,nrcpt=1(队列活动)
4月13日15:14:08 rs211184后缀/管道[7504]:116E523CA8C:to=,中继=过滤器,延迟=0.2,延迟=0.16/0/0/0.04,dsn=2.0.0,状态=已发送(通过过滤器服务交付)
4月13日15:14:08 rs211184后缀/qmgr[7492]:116E523CA8C:已删除
Apr 13 15:14:08 rs211184本地后缀[7522]:本地后缀:来自=test@gmail.com,至=example@example.de,dirname=/var/qmail/mailnames
4月13日15:14:08 rs211184后缀/管道[7521]:3FFDF23CB5F:to=,中继=plesk_虚拟,延迟=0.02,延迟=0.01/0/0.01,dsn=2.0.0,状态=已发送(通过plesk_虚拟服务交付)
Apr 13 15:14:08 rs211184后缀/qmgr[7492]:3FFDF23CB5F:已删除

您似乎希望消息出现在文件中,奇怪的是,它是一个静态文件名,但它不是这样工作的。消息以标准输入方式到达。至少,只需删除
/path/to/message文件
——但实际上,将
sed
管道传输到
sed
通常是一个错误;您应该将其重构为单个
sed
脚本(或Awk、或Python,或您拥有的任何东西)


sed-e:a;N、 美元!文学士;s/=\n//g'-e的s/如果我能理解白名单的功能,那么将所有这些转换为一个相对简单的脚本可能不会太难。看起来是时候从
sed
转向更高级的东西了;或者,可以将白名单内容放入外部文件中,每当您更新
白名单时,您都会更新该文件。如前一个问题所述,任何MIME编码都足以绕过过滤器。HTML通常引用可打印编码;您将错过任何看起来像
htt=\np://badsite.example.com
(其中
\n
是引用的可打印正文中的物理换行符)或base64编码URL的URL。我已编辑了问题。。。但是像
htt=\np://badsite.example.com
这样的换行符被替换为第一个sed命令…我现在明白了;堆栈溢出提供了一个“链接”问题——不知道为什么,但现在一切都清楚了。被拒绝的权限显然不是编程错误。postfix用户缺少对您试图操纵的目录的写(甚至可能是读)访问权限。好的,我已经解决了权限被拒绝的问题。但是过滤器仍然无法工作,尽管syslog中没有错误。。。见编辑后的问题。
#!/bin/bash

sed ':a;N;$!ba;s/=\n//g' $1 | sed 's/</\n\</g'  | sed -r '/'"$(sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' /path/to/whitelist | paste -s -d '|')"'/! s/http/httx/g'
  # =============================================================
  # service type  private unpriv  chroot  wakeup  maxproc command
  #               (yes)   (yes)   (yes)   (never) (100)
  # =============================================================
  filter    unix  -       n       n       -       10      pipe
    flags=Rq user=filter null_sender=
    argv=/path/to/afterqueue.sh -f ${sender} -- ${recipient}
Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 3FFDF23CB5F: from=<test@gmail.com>, size=4358, nrcpt=1 (queue active)
Apr 13 15:14:08 rs211184 postfix/pipe[7504]: 116E523CA8C: to=<example@example.de>, relay=filter, delay=0.2, delays=0.16/0/0/0.04, dsn=2.0.0, status=sent (delivered via filter service)
Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 116E523CA8C: removed
Apr 13 15:14:08 rs211184 postfix-local[7522]: postfix-local: from=test@gmail.com, to=example@example.de, dirname=/var/qmail/mailnames
Apr 13 15:14:08 rs211184 postfix/pipe[7521]: 3FFDF23CB5F: to=<dsehlhoff@lcdev1.de>, relay=plesk_virtual, delay=0.02, delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered via plesk_virtual service)
Apr 13 15:14:08 rs211184 postfix/qmgr[7492]: 3FFDF23CB5F: removed
sed -e ':a;N;$!ba;s/=\n//g' -e 's/</\n\</g' |
# This is too convoluted, really!
sed -r '/'"$(sed -r 's/\\/\\\\/g;s/\//\\\//g;s/\^/\\^/g;s/\[/\\[/g;s/'\''/'\'"\\\\"\'\''/g;s/\]/\\]/g;s/\*/\\*/g;s/\$/\\$/g;s/\./\\./g' whitelist |
paste -s -d '|')"'/! s/http/httx/g'