2017-07-27 181 views
1

因此,出于某种原因,我无法使用mail()PHP函数,也不能使用带有SMTP的PHPMailer。所以寻找的选择,我写了一个简短的shell脚本来发送带有附件的电子邮件,内容如下:通过从php运行shell脚本发送邮件

#!/bin/bash 
echo "Some text $1 $2 $3" | mail -a "/path/to/attached/file.xlsx" -s "Subject text" [email protected] 

当我直接从终端上运行的文件,它完美的作品,并在邮件中正确地接收依恋和所有。

但是,当我尝试从PHP运行,我有以下代码:

shell_exec("bash /path/to/script $m1t $m2t $afl"); 

而且它不显示任何错误,并且不会返回任何输出,但邮件没有发送。

我不能让shell脚本通过PHP调用它来发送电子邮件吗?或者我做错了什么?

感谢有关此事的任何帮助。

+0

也许[是这个帮助](https://stackoverflow.com/questions/20124327/php-shell-exec-command-is-not-working) – Yolo

+0

我在FreeBSD服务器上遇到了问题,其中'$ PATH '从PHP运行shell命令时未使用或未设置。尝试通过PHP运行'which $ foo'来查看你的PHP shell进程是否可以找到程序。 – amphetamachine

+0

@amphetamachine我来看看。但是我不认为这是问题,因为当我运行其他脚本时(例如,在同一个shell文件中的'ls'),它完全符合了。 –

回答

0

对于红帽企业Linux,CentOS,Fedora和其他Linux发行版的SELinux,您应该验证Apache进程是否允许访问sendmail。这可以通过登录到服务器(SSH或打开本地主机是否在终端),并运行

getsebool httpd_can_sendmail 

当输出httpd_can_sendmail --> off您可以通过

sudo setsebool -P httpd_can_sendmail on 

-P -flag品牌能不能做到它是永久性的,所以它在重新启动后仍然有效。命令可能需要一段时间才能执行。