最近准备写一个个人博客,博客的用户注册和找回密码都需要邮件验证。PHP 虽然提供了 mail 函数来发送邮件,但是 mail 函数的功能限制较多,只能发送普通文本,如果要发送 HTML 或附件就比较麻烦。

在逛 Github 的时候看到一个功能比较强大的邮件发送类 PHPMailer ,很多著名的 PHP 开源项目 比如 WordPress、Drupal、SugarCRM 也都在用 PHPMailer 发送邮件。

下面就简单写一下 PHPMailer 发送邮件的过程。

PHPMailer 的 Github 地址是 https://github.com/PHPMailer/PHPMailer

可以使用 Composer 安装,也可以手动下载项目引入,我这里是手动下载项目引入。

发送邮件

发送邮件相关的代码都在 src 目录中,language 目录中包含了不同语言的报错信息。

下面使用 SMTP 发送邮件:

<?php

use PHPMailer\PHPMailer\PHPMailer;  //  设置命名空间
use PHPMailer\PHPMailer\SMTP;  //  设置命名空间
use PHPMailer\PHPMailer\Exception;  //  设置命名空间
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer(true);  //  创建邮件发送对象

try {
    //  服务器相关设置
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;  //  输出服务器日志
    $mail->isSMTP();  //  使用 SMTP 来发送邮件
    $mail->SMTPAuth = true;  //  启用 SMTP 身份验证
    $mail->Host = 'smtp.qq.com';  //  SMTP 服务器地址
    $mail->Username = 'email@misterma.com';  //  SMTP 用户名
    $mail->Password = 'wvikg5hyswveche';  //  密码
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;  //  使用 TLS 加密
    $mail->Port = '25';  //  SMTP 端口

    //  发件人和收件人
    $mail->setFrom('email@misterma.com', 'Mr. Ma');  //  发件人
    $mail->addAddress('usmmiuy@gmail.com', 'Joe User');  //  添加收件人

    // 邮件标题和内容
    $mail->isHTML(true);  //  邮件格式设置为 HTML
    $mail->Subject = '这是邮件标题';  //  邮件标题
    $mail->Body = '这是 HTML 内容 <b>加粗的文字</b>';  //  HTML 内容
    $mail->AltBody = '文本内容';  //  纯文本
    $mail->addAttachment('tutorial.txt');  //  添加附件

    $mail->send();  //  发送
    echo '发送完成';
} catch (Exception $e) {
    //  输出错误信息
    echo '错误:' . $mail->ErrorInfo;
}

我上面使用的是 QQ邮箱的 SMTP 服务。

一些属性和方法说明

下面是服务器相关的一些属性说明:

  • $mail->Host:设置 SMTP 服务器地址,不同邮箱服务的 SMTP 地址也会不一样,下面会有常用的邮箱服务的 SMTP 地址。
  • $mail->Username:SMPT 用户名,一般也就是发送邮件的邮箱地址。
  • $mail->Password:SMTP 的用户密码,有的邮箱服务可以直接使用邮箱密码,有的邮箱在开启 SMTP 后会生成一个独立的授权码。
  • $mail->Port:SMTP 服务器端口,不同邮箱服务的端口也会不一样,下面会写常用的邮箱的 SMTP 端口。

下面是发件人和收件人相关的一些方法说明:

  • $mail->setFrom():发件人,第一个参数是发件人邮箱地址,第二个参数是发件人姓名。
  • $mail->addAddress():添加收件人,第一个参数是收件人的邮箱地址,第二个参数是收件人的姓名,收件人可添加多个。

下面是邮件标题和邮件内容相关的一些方法说明:

  • $mail->isHTML():使用 HTML 格式。
  • $mail->Subject:邮件的标题或主题。
  • $mail->Body:邮件内容。
  • $mail->AltBody:邮件内容(纯文本)。
  • $mail->addAttachment:添加附件,参数就是文件名,附件可以添加多个。

常用邮件服务的 SMTP 地址和端口

下面是一些常用的邮箱服务的 SMTP 地址和端口:

服务商SMTP 地址SMTP 端口
QQ邮箱smtp.qq.com25
网易126邮箱smtp.126.com25
网易163邮箱smtp.163.com25
新浪邮箱smtp.sina.cn25
Gmailsmtp.gmail.com465
雅虎邮箱smtp.mail.yahoo.com465

Foxmail邮箱 可以直接使用 QQ邮箱 的 SMTP 地址和端口。

以上就是 PHPMailer 发送邮件的简单演示,PHPMailer 还有很多选项可以设置。如果要查看更多的设置选项可以访问官方的 API 文档