use*_*171 5 php email gmail smtp
最近我在运行 kubuntu 桌面的 ubuntu 12.04 服务器上安装了 msmtp。msmtp 的安装工作正常,我什至可以使用 gmail 的 smtp 服务器通过终端发送邮件。
我的问题是,虽然可以通过终端发送邮件,但它仍然无法使用 php 邮件。我尝试过使用 phpmail()函数,但从未收到任何电子邮件。
我检查了 apache 错误日志(/var/log/apache2/error.log),但它们是空的。
有谁知道如何解决这一问题?如果需要任何进一步的信息,请说出来:)
执行php脚本时也没有出现错误。
下面的代码与已发送的邮件相呼应,但我从未收到电子邮件:
<?
if(mail( 'noreply.njmedia@gmail.com', 'Test mail from localhost', 'Working Fine.'))
{
echo 'Mail sent';
}
else
{
echo 'Error. Please check error log.';
}
?>
Run Code Online (Sandbox Code Playgroud)
对我来说,原因是 msmtp 配置文件的文件所有权和权限不正确。
当我尝试从 CLI 运行 PHP 邮件发送脚本时root,它起作用了。但是,切换用户www-data并尝试再次运行脚本(也在 CLI 上)失败,并显示以下消息:
msmtp: /etc/msmtprc: contains secrets and therefore must be owned by you
msmtp: /etc/msmtprc: contains secrets and therefore must have no more than user read/write permissions
Run Code Online (Sandbox Code Playgroud)
通过向 Apache(或 Nginx 等)发出 HTTP 请求来触发 PHP 脚本将产生相同的结果(因为 msmtp 将由www-data)。
假设您的 msmtp 配置文件位于/etc/msmtprc,这些命令将解决这些问题:
chown www-data:www-data /etc/msmtprc
chmod 600 /etc/msmtprc
Run Code Online (Sandbox Code Playgroud)
在进行这些更改之前,请考虑这些新权限是否适合您的情况(例如,是否存在安全隐患?)。
小智 1
php 邮件模块调用名为 sendmail 的系统命令来发送电子邮件。sendmail 由各种邮件服务器实现,例如 postfix 或 exim。正如我所见,msmtp 不提供 sendmail 二进制文件。请检查是否可以通过命令行执行sendmail。如果没有,请尝试安装 postfix。
更新:我明白了,msmtp-mta 也提供了 sendmail 二进制文件。如果你不需要 postfix,你可以尝试这个。