我正在尝试在服务器上设置 exim4,以便它可以接收几个子域的邮件,并且我想将其传输到 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
:
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 主日志,并得到以下信息:
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
您的问题中没有提供很多细节,因此我将提供一份需要查看的一般事项的列表。
1) 一个常见问题是 exim 用户无法读取和/或执行 php 脚本。通过将 php 脚本设置为模式 755 并重新发送来进行测试。
2) 确保脚本中的 bang 路径正确。通常这将是/usr/bin/php 的 #! 您应该能够从命令行运行它,就像从 exim 调用它一样:
cat temp.eml | /dir/to/php_mailer.php
3) 或者,如果您通过将其调用为 来测试它php /dir/to/php_mailer.php
,则需要设置传输以直接调用 php 二进制文件。使用 php 二进制文件的完整路径。
4) 由于命令不是在 shell(例如 bash 或 sh)下运行,因此设置的环境变量很少。php 脚本直接由 exim 在传输中执行。
5) 总体而言,管道传输的文档非常好,因此请确保您已通读了所有内容,并且准确了解了所使用的选项的作用。您有一个管道传输的简单应用程序,并且您没有用它做任何非常复杂的事情。 管道运输
编辑:查看上面的日志消息后,问题似乎不是您的传输或 php 脚本。问题是将电子邮件发送到 Exim 的过程表明发件人根@ETC_MAILNAME而不是某个有效域名的 root。您需要首先修复将电子邮件发送到 Exim 的所有内容。或者,也可能是您的 Exim 配置出了问题,因为 Exim 可能需要将 ETC_MAILNAME 转换为文件 /etc/mailname 的内容(基于 Debian 的 Exim4 系统的标准操作)。