PHPMailer使用封装教程:为自己的PHP项目配置邮件功能
若为获取最佳阅读体验,请移步至本文永久链接:https://xenns.com/posts/1df67ba2/
开源的PHPMailer简洁易用,相对于PHP官方文档提供的mail()需要一个已安装且正在运行的邮件系统,才能使邮件函数可用,选择更强大易用的PHPMailer无疑一个更为明智的选择。
一、引言
最近在对一个停止维护的必应每日壁纸源码进行二次开发,在开发过程期间难免会有报错。为了避免每次报错的时候还需要去翻阅日志,就想到了用邮件把每天的自动抓取结果发送到自己的邮箱里。每次运行的结果都能及时的收到通知。本想PHPMailer的封装教程在网上已经不再罕见,去翻阅的时候却发现大部分的封装教程或多或少都有点过时了。索性我直接去翻阅了官方文档,按照官方的使用建议,去除了不必要的配置内容并进行了封装,也写下了比较符合现在PHPMailer的封装教程以供网友们查阅。
二、PHPMailer下载
PHPMailer的下载有两种方式,直接下载GitHub源代码或通过Composer安装。
这里我以Github源码下载方式以及163邮箱配置为例。
2.0 示例版本
今天是2022-09-18,我所使用的版本为PHPMailer 6.6.4
2.1 从 github 上下载
GitHub链接:https://github.com/PHPMailer/PHPMailer/
2.2 通过Composer安装
composer require phpmailer/phpmailer
2.3 下载PHPMailer 6.6.4(可选)
为防止本文配置适用性降低,推荐大家下载与本文版本相同的6.6.4版本。
本文所用源码下载链接在文末给出。
2.4 所需文件
下载完成后的目录结构应为如下所示,我们只需要src
目录下的Exception.php
、PHPMailer.php
、SMTP.php
三个文件,并将它放入项目目录中。
PHPMailer
│
│ COMMITMENT
│ composer.json
│ darknetf.txt
│ get_oauth_token.php
│ LICENSE
│ README.md
│ SECURITY.md
│ VERSION
│
├─language
│ phpmailer.lang-zh.php
│ phpmailer.lang-zh_cn.php
│
└─src
Exception.php
OAuth.php
OAuthTokenProvider.php
PHPMailer.php
POP3.php
SMTP.php
三、配置与使用
3.0 环境要求
注意,在使用之前,应检查PHP的openssl扩展与sockets扩展是否已开启。
3.1 官方示例
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.example.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'user@example.com'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
$mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$mail->setFrom('from@example.com', 'Mailer');
$mail<