设为首页 收藏本站
查看: 1963|回复: 0

Postfix在收到指定地址的邮件时触发启动一个shell脚本

[复制链接]

尚未签到

发表于 2017-5-16 09:08:13 | 显示全部楼层 |阅读模式
  项目中遇到一个问题,就是题目中提到的问题。中文的说明文章好像没有,所以找了一篇英文的文章了解了一下。链接如下:http://blog.thecodingmachine.com/content/triggering-php-script-when-your-postfix-server-receives-mail如果我写的文字有哪些地方难以理解大家可以参照英文原版。
  以下是我在个人理解的基础之上整理的,请大家指正。(原文章是触发调用PHP脚本,此处改为Sheel脚本)
  1. 打开  master.cf 追加以下一行文本。

myhook unix - n n - - pipe
flags=F user=www-data argv=/path/to/postfix.sh ${sender} ${size} ${recipient}
  这里创建一个filter(过滤器),别名myhook是管道(pipe)模式的,这一点要注意,一旦配置成功,邮件将直接以标准输入(stdin)转给argv指定的脚本。
  另外,稍微说明一下user,这个用户我们试了root,出错!postfix以及postfix组用户,出错!没时间调查原因。后来新建了一个用户,没有设定用户组,却执行成功了,哎……悲剧。这里搞不懂,请高手知道原因的指点迷津!还有后面的参数,其实pipe有好多,这三个是原文章给出来的,我没变直接用了,好像我们的处理脚本也不需要。
  2. 继续修改 master.cf 找到下面的文本

smtp      inet  n       -       -       -       -       smtpd
  追加

-o content_filter=myhook:dummy
  这里的意思是将smtp收到的邮件转给filter。
  再找到一下文本内容

pickup    fifo  n       -       -       60      1       pickup
  同样追加一下内容

-o content_filter=myhook:dummy
  和上面一样的,这里是将通过命令行sendmail的邮件转给filte。如果不需要不加也行。
  到这里我们reload一下postfix

postfix reload
  如果你已经准备好了shell那么就可以直接测试一下,看是否有任意邮件被收到postfix就默认调用shell。说实话我没试过,原文这样说的。我一口气配置到底的。
  3. 给出shell接收脚本

#!/bin/sh
MAILDIR=/home/mailtest2/MAILDIR/new/
FILENAME=""
email=""
while read line ; do
    email+=${line}"\n"
done
echo -e $email > /home/postfix/postfix.log
DATE=`date +"%Y%m%d%H%M%S"`
#echo ${1}+${DATE} > /home/postfix/postfix.log
  4. 下面指定过滤
  找到 access 并修改,没有新建。追加如下内容:

david@example.com FILTER myhook:dummy
  当然,收件人地址你可以随便指定,这里是个例子。
  别动,还没完人家说 access 文件必须被Hash化,所以我们要执行命令行。

postmap /etc/postfix/access
  就是上面的命令了,路径自己确认一下,可以修改的。
  5. 最后我们要把对 access  的参照加到 main.cf 中。
  如果文件中存在key
  smtpd_recipient_restrictions 
  在key值的最开头追加
  check_recipient_access hash:/etc/postfix/access
  如果key值根本不存在就直接追加下面的内容

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/access, permit_mynetworks, reject_unauth_destination
  追后, postfix reload
  试试看,发送一封邮件到你定义过滤的邮箱能否启动shell输出一个文件到制定的目录下。
  哦!对了,由于Postfix直接将输入以管道(pipe)标准输入(stdin)的形式转给脚本了,所以在postfix的收件文件夹下就不会再生成邮件文件了。
  以下是测试后针对出现问题的修正:
  这对上面的第2步,如果要求针对,特定的地址启动过滤的话,需要删除掉该步骤追加在 master.cf中的内容。因为该设定内容会针对所有的smtp和pickup方式发送的邮件,在被postfix收到后启动特定的脚本处理。在第1步设定以后直接跳到第4步设定就可以了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-377921-1-1.html 上篇帖子: 用Shell命令看看你是一个什么样的程序员 下篇帖子: Windows的adb shell中使用vi不乱码方法及AdbPutty
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表