我创建了一个系统用户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)
可能是什么问题?
答案 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中即可。