今天上个项目,需要用到php的mail()函数。由于没有架设邮件服务器,也限制不能使用phpmail(),于是使用exim4。方法如下,但还是遇到了好多坑。最坑的当属一个分号——;。
服务器环境:Debian
步骤:
- 安装
apt-get remove sendmail-*
#卸载 Sendmailapt-get install exim4
#安装exim4
- 配置
dpkg-reconfigure exim4-config
#配置exim4echo "邮件正文" | mail -s 邮件主题 [email protected]
#测试邮件发送vim php.ini,sendmail_path = /usr/sbin/sendmail -t -i
#在php里添加sendmail参数 ——坑就在这里!systemctl restart apache2 & systemctl restart php-fpm
#重启apache2和php-fpm
- 测试
- 新建php文件,输入以下代码:
<?php $txt = "First line of text\nSecond line of text"; // 如果一行大于 70 个字符,请使用 wordwrap()。 $txt = wordwrap($txt,70); // 发送邮件 mail("[email protected]","My subject",$txt); ?>
- 然后并没有收到邮件。
- 新建php文件,输入以下代码:
- 修复
sendmail_path = "/usr/sbin/sendmail -t" -i
#双引号,测试失败sendmail_path = '/usr/sbin/sendmail -t -i'
#单引号,测试失败sendmail_path = /usr/sbin/sendmail -t -i;
#分号,成功。
- 结论
- 在php配置文件中,前面的分号代表注释当前行,后面的分号代表一行完整结尾。
- systemctl和service都可以控制服务状态。