我正在尝试制作一份小时事通讯。要发送电子邮件,我想用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邮件配置:
- 打开php.ini文件(如果您不知道它在哪里,请参阅下文)
- 搜索读取[邮件功能]的行
- 添加/更改邮件服务器的详细信息。这可能是本地邮件服务器或ISP的邮件服务器
- 保存/关闭php.ini文件
- 重新启动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 =