如果从终端调用php-mail(),则不工作


php mail() not working if called from terminal

我正在尝试制作一份小时事通讯。要发送电子邮件,我想用shell_exec()调用sender脚本。

<?php
$mail = new mail();
$mail->set('to', $to);
$mail->set('message', $content);
$mail->set('subject', 'Newsletter');
$mail->send();
?>

mail()对象是一个用于发送电子邮件的简单类,并调用->send()方法中的php-mail()函数。发送前会添加标头。

如果我在页面加载时在浏览器中调用这个脚本,它就会正常工作。但是:

php send_mail.php

什么也没发生。如果我在发送之前输出这些参数,那么mail()函数将返回true,并且所有参数都已正确设置。

我还检查了/var/log/mail*,但没有产生错误。

我试着用相对路径和绝对路径调用脚本。两者都不起作用。

我现在被卡住了,因为mail()函数只有在从终端调用时才起作用,否则服务器似乎一切都很好。

我正在使用sendmail发送电子邮件。

我该怎么解决这个问题?

谢谢:)

从命令行使用PHP时,通常可以使用不同的PHP.ini文件。这个CLI php.ini文件可能没有配置您的邮件设置。

从命令行使用php -i来查找PHP正在使用的ini文件,然后检查该文件中的邮件设置,特别是与普通的apache PHP.ini文件(可以通过将<?php phpinfo() ?>粘贴在脚本中并在浏览器中加载来找到)进行比较。

我认为,cli模式缺少一些配置。比较从cli和Web服务器加载的php.ini

ini_set ( "SMTP", "smtp-server.example.com" );
date_default_timezone_set('America/New_York');

也可以帮助

检查PHP邮件配置:

  1. 打开php.ini文件(如果您不知道它在哪里,请参阅下文)
  2. 搜索读取[邮件功能]的行
  3. 添加/更改邮件服务器的详细信息。这可能是本地邮件服务器或ISP的邮件服务器
  4. 保存/关闭php.ini文件
  5. 重新启动web服务器

[mail function];

For Win32 only.

SMTP = localhost

smtp_port = 25

For Win32 only.

sendmail_from = me@example.com

For Unix only. You may supply arguments as well (default: "sendmail -t -i").

sendmail_path =