【问题标题】:using shell_exec to send email fail使用 shell_exec 发送电子邮件失败
【发布时间】:2016-04-17 22:22:09
【问题描述】:

几天来,我一直在努力从我的 php 项目发送电子邮件。我想我得到了一些东西,但它不起作用。

这是我所做的: 我首先使用以下命令安装了 mailutils:

sudo apt-get install mailutils

有了它,我可以向自己发送电子邮件(通过 shell)。 我使用以下命令向自己发送了一封电子邮件,并且它可以工作!!!!

mail -s subject mymail888@gmail.com <<< message

但在我的 php 项目中,这一行不起作用:

shell_exec("mail -s subject mymail888@gmail.com <<< message");

我认为这与我的项目的权限有关,但我不知道如何更改mail命令的权限。

【问题讨论】:

  • 你试过PHP函数mail()..如果没有试试看手册
  • @PetrHejda ,我尝试过使用它.. 问题是它不起作用.. 我在本地主机中,我听说这可能是个问题..

标签: php linux shell email permissions


【解决方案1】:

除非您有令人信服的理由不这样做,否则您应该真正使用 PHP 的内置 mail() 函数。如果您需要的不仅仅是mail() 的基本功能,那么大多数具有电子邮件发送功能的 CMS 和框架都会简单地包装mail() 功能。

话虽如此,我不知道您的环境设置是什么样的,因此请尝试使用system()passthru()exec() 之一,它们接受不同数量的附加错误代码和输出参数您可以转储/回显以查看运行任意命令行命令时的实际错误是什么。

【讨论】:

  • 我已经尝试了以下所有方法:$s=passthru("mail -s subject mymail888@gmail.com
  • 您期望这些函数中的每一个都做同样的事情,但事实并非如此。首先,它们并不都返回一些东西,所以$s 可能不包含你所期望的。如果你运行这个你会得到什么:$output = array();$return = 0;$command = "mail -s subject mymail888@gmail.com &lt;&lt;&lt; message"; exec($command, $output, $return);`var_dump($output, $return);
  • 我得到“array (size=0) empty int 2”
  • $output 为空意味着该命令没有返回任何内容。 $return 的值“2”是最常见的退出代码,意思是“没有这样的文件或目录”。尝试以下操作,每次转储 $output$return: * 传递邮件的完整路径,例如“/usr/bin/mail”(或者任何 mutt 或您正在使用的任何系统安装在您的系统上)* Not 在您的命令中使用 shell 重定向(“echo “My message” | mail -s “My subject” me@mymail.co"
  • 我必须承认我不明白您所说的“传递邮件的完整路径,例如“/usr/bin/mail”是什么意思,或者为什么在您编写的命令中有一个“回声”。 . 我所做的尝试是将命令更改为: $command= '“My message” | /usr/sbin/sendmail -s “My subject” mymail888@gmail.com' ; (其中 /usr/sbin/sendmail 是我的 sendmail_path这次的输出是:array (size=0) empty int 1 ....(没有发送电子邮件..)
猜你喜欢
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2018-02-01
  • 2017-02-09
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多