最近我在运行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.';
}
?>
对我来说,原因是文件所有权不正确&msmtp配置文件上的权限。
当我尝试以root
的身份从CLI运行PHP邮件发送脚本时,它成功了。但是,将用户切换到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
通过对Apache(或Nginx等)的HTTP请求触发PHP脚本将具有相同的结果(因为msmtp将由www-data
用户调用)。
假设您的msmtp配置文件位于/etc/msmtprc
,这些命令将修复这些问题:
chown www-data:www-data /etc/msmtprc
chmod 600 /etc/msmtprc
在进行这些更改之前,请考虑这些新权限是否适合您的情况(例如,是否存在安全隐患?)。
更新:我明白了,msmtp-mta也提供了sendmail二进制文件。如果你不想要后缀,你可以试试这个。