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

时间:2013-06-06 18:56:56

标签: php sendmail forward

我创建了一个系统用户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发送邮件时,邮件无法发送,我收到邮件恶魔错误:

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

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

好的,有两件事或者三件可以使这件事发挥作用。

此解决方案适用于sendmail。

首先:

chmod 777 /home/userA/script.php 

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

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

第三:将/etc/smrsh中的simlink添加到php bin本身!不要问为什么......

ln -s /usr/bin/php php

第四:在.forward

中创建的/home/userA/文件中

只写一行并使用|然后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与经典shell)。您必须在sendmail.mc中添加smrsh。这里有一些信息:configure sendmail to use smrsh

现在您可以向userA@myDomain.com发送电子邮件,您的电子邮件将传递给php脚本。太棒了!?

答案 1 :(得分:-1)

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

此外,我认为您不能使用.forward方法将电子邮件转发给命令。

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