将收到的电子邮件转发到php脚本(sendmail)


Forward a received email to a php script (sendmail)

我已创建系统用户userA

/home/userA/我放了一个文件.forward和一个php脚本script.php

.forward我把/home/userA/script.php

script.php中我放了

#!usr/bin/php -q
<?php
mail('userB@myDomain.com','something','something else');
?>

脚本中的电子邮件是正确的,服务器工作。(我的意思不是发送电子邮件,而是得到一些确认脚本已执行)

当我向userA@myDomain.com发送邮件时,邮件无法发送,我得到一个mailer-demon错误:

    ----- The following addresses had permanent fatal errors -----
/home/userA/script.php
   (reason: Can't create output)

有什么问题吗?

好了,两件事或者三件事就可以了。

此解决方案适用于sendmail。

:

chmod 777 /home/userA/script.php 

second:将/etc/smrsh中的simlink添加到script.php文件

ln -s /home/userA/script.php script.php

第三:添加一个总是在/etc/smrsh的simlink到php bin本身!不要问为什么……

ln -s /usr/bin/php php

/home/userA/

中创建的.forward文件中

只写一行,开头是|,然后是php,然后是filePath

ex |php /home/userA/script.php

script.php文件中,在<?php bla... ?>之前添加#!/usr/bin/php -q(我不确定是否有必要,但它可以工作…)

在这个例子中,php位于/usr/bin/php,你可以执行$ which php来查找php二进制文件的位置。

script.php中,如果你想访问你转发的邮件,你可以这样做

$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
    $email .= fread($fd, 1024);
}
fclose($fd);

在某些版本的sendmail中,你必须自己配置它,使它使用smrsh而不是sh(安全shell vs经典shell)。你必须在sendmail.mc中添加smrsh。配置sendmail使用smrsh

现在你可以发送电子邮件到userA@myDomain.com,你的电子邮件将被传递到一个php脚本。太棒了! ?

如果你想调用php脚本并执行它,你需要这样的命令:php/home/userA/script.php它比#!usr/bin/php -q方法(我确信它有效)

另外,我不认为你可以用。forward方法将电子邮件转发给命令。

您可以做的是将邮件接收到userA邮箱中,然后使用守护进程(php或bash脚本)执行检查收件箱中是否有新邮件的脚本。或者,如果你只想转发到另一个电子邮件地址,只需把地址放在。forward中,就可以了。