如何通过PHPmail()函数使用Gmail或Yahoo
红色是什么意思
用户需要输入或自定义的行在本教程中将显示为红色!
其余的大部分应该是可复制粘贴的。
关于 PHP 邮件()
PHP mail() 函数使用 sendmail_path 配置指令中的程序发送电子邮件。 默认设置为 sendmail。
虽然大多数 Linux 安装都预装了 sendmail,但设置 SPF/PTR 记录、生成 DKIM 密钥等等以确保您的 PHP 脚本发送的电子邮件不会被标记为垃圾邮件总是很麻烦。 名为 MSMTP 的 SMTP 客户端可用于使用第三方 SMTP 服务器发送电子邮件,这也可以由 PHP 的 mail() 代替 sendmail 使用。
安装
要在 Fedora Linux 上安装 MSMTP,请使用 yum:
yum install msmtp
CentOS 存储库没有 MSMTP 的 RPM 包,因此我们需要从源代码安装它:
yum install make gcc pkgconfig wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download tar -xvf msmtp-1.4.31.tar.bz2 cd msmtp-1.4.31 ./configure make make install
撰写本文时最新版本是 1.4.31,但将来可能会更改,因此要获取最新版本,请访问 这个 sourceforge 页面 。
在 Ubuntu/Debian 发行版上使用 apt-get:
apt-get install msmtp
Arch Linux 用户:
sudo pacman -S msmtp
配置 MSMTP
MSMTP 的配置文件存储在每个用户的 ~/.msmtprc 中,/etc/msmtprc 是系统范围的配置文件。 打开目录中的配置文件。
vi ~/.msmtprc
为 Yahoo 帐户添加以下行:
account yahoo tls on tls_starttls off tls_certcheck off auth on host smtp.mail.yahoo.com user user1 from user1@yahoo.com password yourYahooPa5sw0rd
对于 Gmail,请使用以下设置:
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user user1@gmail.com from user1@gmail.com password yourgmailPassw0rd
这个文件也可以有多个账户,只要确保每个部分的 "account" 值是唯一的。 保存文件并使用 chmod 使该文件只有所有者可读,因为它包含密码。 此步骤是强制性的,因为如果权限超过 600,msmtp 将不会运行 '。
chmod 600 ~/.msmtprc
在 PHP 中实现此功能之前,请从命令行检查以确保其正常工作。 为此,请创建一个包含简单电子邮件的纯文本文件:
echo -e "From: alice@example.com \n\ To: bob@domain.com \n\ Subject: Hello World \n\ \n\ This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt
现在发送这封电子邮件:
cat sample_email.txt | msmtp --debug -a gmail bob@domain.com
将“gmail”一词替换为“yahoo”或您为“帐户”选项输入的任何内容。 由于 "--debug" 参数,您'会看到很多消息。 如果事情没有按预期工作,这是为了使故障排除变得容易。 如果 bob@domain.com 收到此电子邮件,则一切设置正确,因此将此文件复制到 /etc 目录:
cp -p ~/.msmtprc /etc/.msmtp_php
将所有权更改为运行 Web 服务器的用户名。 这可以是“apache”、“www-data”或“nobody”,具体取决于您安装的 VPS 和 Web 服务器上的 Linux 发行版:
chown www-data:www-data /etc/.msmtp_php
配置 PHP
打开 php.ini 文件,其位置根据操作系统和安装的 PHP 类型(PHP CGI、mod_php、PHP-FPM 等)而有所不同:
vi /etc/php5/php.ini
找到以下行:
sendmail_path =
通过将路径添加到 msmtp 命令来修改它:
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"
手动创建一个日志文件并将其所有权更改为您的 Web 服务器运行的用户名:
touch /var/log/msmtp.log chown www-data:www-data /var/log/msmtp.log
重新启动您的 Web 服务器以应用更改:
service httpd restart
在 Arch Linux 中,这是使用 systemctl 命令完成的:
systemctl restart httpd
根据您的操作系统和 Web 服务器,将“httpd”替换为适当的名称。 如果 PHP 作为单独的进程运行(如 PHP-FPM),请重新启动它:
service php5-fpm restart
使用简单的 mail() 创建一个 PHP 脚本来测试此设置:
<?php if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function.")) print "Email successfully sent"; else print "An error occured"; ?>
从 Web 浏览器访问此文件。
http://www.example.com/file.php
如果未发送此电子邮件,您可以检查 msmtp 日志文件是否有错误。
tail /var/log/msmtp.log
常见错误
如果使用PHP脚本时没有发送邮件,请按如下方式排查:
- 检查您是否编辑了正确的 php.ini 文件。 这可以通过创建 phpinfo(); 文件并检查“Loaded Configuration File”部分来确认。
- msmtp 配置文件的路径可能是错误的,或者 Web 服务器没有读取此文件的权限。
通过使用命令行 PHP 运行脚本来检查是否发送了电子邮件:
php /var/www/html/file.php