我试图在服务器上设置exim4,以便它可以接收邮件的几个子域,我想pipe到PHP脚本。 我想通过我的自定义脚本(PHP)处理所有传入的邮件。
我在下面发布了一些我的设置细节。 我设置这个比较新,所以我很抱歉,如果我完全没有。
我已经尝试了下面的命令,它似乎没有做任何事情。 我在/var/mail中看不到任何新邮件,而且PHP脚本似乎没有被击中。
echo "This is a test." | mail -s Testing [email protected]
这是自定义路由器,在exim4.conf :
cmd_router: driver = accept domains = +local_domains transport = cmd_transport no_verify
以下是exim4.conf中的exim4.conf :
cmd_transport: debug_print = "T: using cmd_transport" driver = pipe command = /dir/to/php_mailer.php delivery_date_add envelope_to_add
这里是update-exim4.conf.conf文件:
dc_eximconfig_configtype='internet' dc_other_hostnames='QAnetwork ; sub1.domain.net ; sub2.domain.net ; localhost' dc_local_interfaces='127.0.0.1 ; 127.0.1.1 ; 123.123.123.123(server's external ip)' dc_readhost='QAnetwork ; sub1.domain.net ; sub2.domain.net' dc_relay_domains='' dc_minimaldns='false' dc_relay_nets='' dc_smarthost='' CFILEMODE='644' dc_use_split_config='false' dc_hide_mailname='true' dc_mailname_in_oh='true' dc_localdelivery='mail_spool'
*更新*
运行echo mail命令后,我一直在监视exim4 mainlog,并得到以下结果:
2014-07-03 14:39:45 1X2lv7-0004mg-9Q <= root@ETC_MAILNAME U=root P=local S=488 2014-07-03 14:39:45 1X2lv7-0004mg-9Q ** [email protected]: Unrouteable address 2014-07-03 14:39:45 1X2lv7-0004mk-Br Error while reading message with no usable sender address (R=1X2lv7-0004mg-9Q): at least one malformed recipient address: root@ETC_MAILNAME - malformed address: _MAILNAME may not follow root@ETC 2014-07-03 14:39:45 1X2lv7-0004mg-9Q Process failed (1) when writing error message to root@ETC_MAILNAME (frozen)
我真的不知道该怎么做的错误。 我做了一些调查“无路由地址”的错误,但无法得到它的工作。
有任何想法吗?
在你的问题中,你没有提供很多细节,所以我会提供一个一般的东西来看看。
1)一个常见的问题是,PHP脚本是不可读的和/或由EXIM用户执行。 通过将php脚本设置为755模式进行testing并重新发送。
2)确保脚本中的爆炸path是正确的。 通常这将是#!/ usr / bin / php您应该能够从命令行运行它,就好像它是从exim调用一样:
cat temp.eml | /dir/to/php_mailer.php
3)或者,如果您正在通过将其作为php /dir/to/php_mailer.php进行testing,那么您需要设置传输以直接调用php二进制文件。 使用php二进制文件的完整path。
4)很less有环境variables被设置,因为命令不在shell下运行(如bash或sh)。 相反,PHP脚本是由exim在运输中直接执行的。
5)一般来说,输送pipe道的文档是非常好的,所以请确保您已经阅读完所有内容,并且确切理解您使用的选项。 你有一个pipe道运输的直接应用,你没有做任何超复杂的事情。 pipe道运输
编辑:看上面的日志消息后,这个问题似乎不是你的运输或你的PHP脚本。 问题是发送电子邮件到您的Exim的过程是说发件人是root @ ETC_MAILNAME而不是root在某个有效的域名。 您需要首先解决发送给Exim的邮件。 或者,也可能是Eximconfiguration有问题,因为Exim可能会将ETC_MAILNAME转换为文件/ etc / mailname(基于Debian的Exim4系统的标准操作)的内容。