PHPMailer使用封装教程:为自己的PHP项目配置邮件功能

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.phpPHPMailer.phpSMTP.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
│      
└─srcException.phpOAuth.phpOAuthTokenProvider.phpPHPMailer.phpPOP3.phpSMTP.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->addAddress('joe@example.net', 'Joe User');     //Add a recipient$mail->addAddress('ellen@example.com');               //Name is optional$mail->addReplyTo('info@example.com', 'Information');$mail->addCC('cc@example.com');$mail->addBCC('bcc@example.com');//Attachments$mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name//Content$mail->isHTML(true);                                  //Set email format to HTML$mail->Subject = 'Here is the subject';$mail->Body    = 'This is the HTML message body <b>in bold!</b>';$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';$mail->send();echo 'Message has been sent';
} catch (Exception $e) {echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

3.2 个人使用及封装

以下为我个人的使用及封装建议

mail.php

<?php/**
* 邮件发送
* @param $to 接收人
* @param string $subject 邮件标题
* @param string $content 邮件内容(html模板渲染后的内容)
* @throws Exception
* @throws phpmailerException
*/
// 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\Exception;
use PHPMailer\PHPMailer\SMTP;function send_email($to="",$subject='',$content='<h1>Hello World</h1>'){// 引入PHPMailer的核心文件require_once(dirname(__FILE__)."/phpmailer/PHPMailer.php"); //这里的三个文件应填入你的PHPMailer放置目录require_once(dirname(__FILE__)."/phpmailer/Exception.php");require_once(dirname(__FILE__)."/phpmailer/SMTP.php");$config = include 'config.php';//初始化邮箱配置信息---在Config.php文件中进行配置$mailUsername = $config['mailUsername']; //这里应$mailPassword = $config['mailPassword'];$mailFromName = $config['mailFromName'];$mailHost = $config['mailHost'];$mailPort = $config['mailPort'];// 实例化PHPMailer核心类$mail = new PHPMailer(true);try {// 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式// 开启debug调试模式在报错时会给出更多错误信息,数值越高信息越详细//Enable SMTP debugging// 0 = off (for production use)// 1 = client messages// 2 = client and server messages//$mail->SMTPDebug = 2;//调试输出格式//$mail->Debugoutput = 'html';//客户端配置---Server settings$mail->isSMTP(); // 使用smtp鉴权方式发送邮件$mail->SMTPAuth = true; // smtp需要鉴权 这个必须是true$mail->Host = $mailHost; // 链接邮箱的服务器地址$mail->Username = $mailUsername; // smtp登录的账号,163邮箱与QQ邮箱均可$mail->Password = $mailPassword; // smtp登录的密码,此处应邮箱账号开启SMTP服务生成的授权码$mail->SMTPSecure = 'ssl'; // 设置使用ssl加密方式登录鉴权$mail->Port = $mailPort; // 设置ssl连接smtp服务器的远程服务器端口号$mail->CharSet = 'UTF-8'; // 设置发送的邮件的编码//邮件账户设置---Recipients$mail->setFrom($mailUsername, $mailFromName); // 设置发件人邮箱地址与昵称$mail->addReplyTo($mailUsername, ['Information']); // 设置回复时的用户与昵称,应与发件人相同 // 设置收件人邮箱地址// $mail->addAddress('joe@example.net', ['Joe User']); // 收件人配置示例,昵称配置可选// 有多个收件人时添加多个收件人,效果等同于多个$mail->addAddress()if(is_array($to)){foreach($to as $v){$mail->addAddress($v);}}else{$mail->addAddress($to);}//邮件内容---Content$mail->isHTML(true); // 邮件正文是否为html编码$mail->Subject = $subject; // 所要发送邮件的主题// 添加邮件正文// 这里我需要挨个发送多条消息,发送很多条邮件又很麻烦,索性就搞了一个数组// 每条消息添加到数组中,最后以<br>换行符合成一个字符串// 如果不是数组也无需改动if(is_array($content)){$allcontent = implode('<br>', $content);  // 将一维数组以<br>分隔组合成一个字符串$mail->Body = $allcontent;}else{$mail->Body = $content;}//附加信息,可以省略//$mail->AltBody = "This is the body in plain text for non-HTML mail clients";//附件//$mail->addAttachment('./example.pdf');  // 若需要发送附件就取消此条注释,将路径改为需要发送文件的路径。// 发送邮件 返回状态$mail->send();echo '<br>邮件发送成功!';} catch (Exception $e) {echo "<br>Message could not be sent. Mailer Error: {$mail->ErrorInfo}";}
}
?>

Config.php

<?php
/*
Copyright © 2022 by nxingcloud@163.com
*/
// 邮箱配置信息// **********发件人配置************
$config['mailUsername']  = '********'; //邮箱发件人账号
$config['mailPassword']  = '********'; //邮箱发件人SMTP密码
$config['mailFromName']  = '********'; //邮箱发件人昵称
$config['mailHost']      = '********'; //邮箱服务器
$config['mailPort']      = '********'; //邮箱端口号,以163为例,若不使用SSL加密方式则端口号为25,否则为465// ***********发件内容及收件人配置******
$config['mailReceiver']  = '********'; //收件人配置,可设置单个收件人,若需多个收件人则以数组['***', '***']形式。
$config['mailSubject']   = '********'; //所发邮件主题
$config['mailContent']   = '********'; //所发邮件内容return $config;?>

3.3 使用方法

1、将PHPMailer的三个src文件放入项目目录,并在mail.php当中修改引入路径。

2、在config.php中填入所需相关配置。

3、将mail.php引入自己项目PHP文件中,使用sent_email()函数即可。

4、示例:


<?php//引入配置文件
$config = include 'config.php';// 引入邮箱类
include 'mail.php';//初始化邮件发送信息及收件人
$mailReceiver = $config['mailReceiver'];
$mailSubject = $config['mailSubject'];
$mailContent = $config['mailContent'];send_email($to=$mailReceiver, $subject=$mailSubject, $content=$mailContent);?>

四、结语

此文为个人做项目时的随手记录,苦恼于网络教程均不再适用,便写下此文展示最新的配置过程以供网友们查阅。

4.1 下载链接

本文全部源码的下载链接:https://pan.xenns.com/#s/8oFs6_6w

4.2 163及QQ邮箱配置参考

163邮箱

163邮箱配置

QQ邮箱

邮箱POP3服务器(端口995)SMTP服务器(端口465或587)
qq.compop.qq.comsmtp.qq.com

4.3 参考链接

PHPMailer:https://github.com/PHPMailer/PHPMailer/
菜鸟教程:https://www.runoob.com/w3cnote/php-phpmailer.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55544.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现在最好用的或者你喜欢邮件客户端是什么?

经小众读者提名的我最喜爱的《邮件客户端》终于有结果了&#xff0c;看图&#xff1a; “终于”&#xff0c;很多同学来询问《邮件客户端》结果哪里去了&#xff0c;其实一直都在硬盘里&#xff0c;而且差点沉底了。 但是说好了的客户端&#xff0c;那么多人填 Gmail&#xff0…

邮件发送客户端

一、Java Mail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序&#xff08;Mail User Agent,简称MUA&#xff09;。而不是像sendmail或者其它的邮件传输代理&#xff08;Mail Transf…

uniapp 微信小程序表单input输入框,点击下面的输入框时输入法弹出会把输入框内容顶上去

项目场景&#xff1a; 原因分析&#xff1a; 当前页面设置了高度&#xff0c;以及滚动轴&#xff0c;输入法弹出时并没有把页面内容往上定&#xff0c;只顶了输入框内容 解决方案&#xff1a; 不要设置死高度&#xff0c;内容自适应&#xff0c;输入法弹出时让他自己往上顶整…

chatgpt赋能python:Python小数点进位教程:学会进阶计算

Python小数点进位教程&#xff1a;学会进阶计算 什么是小数点进位&#xff1f; 小数点进位是指计算机在处理小数时发生的一种情况&#xff0c;即当小数位数过多时&#xff0c;计算机会自动四舍五入或向上进位&#xff0c;以保证计算的准确性。 Python中的小数点进位 在Pyth…

鸿蒙OS应用开发工具下载安装教程

前言 提示&#xff1a;面向全场景多设备&#xff0c;提供一站式的分布式应用开发平台&#xff0c;支持分布式多端开发、分布式多端调测、多端模拟仿真&#xff0c;全方位的质量与安全保障。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例仅供参考&#xff0c;皆…

ubuntu20.04安装微信客户端,亲测有效!

腾讯微信官网没有出Ubuntu版本的客户端&#xff0c;但是可以根据我提供的微信客户端软件&#xff0c;在Ubuntu20.04版本上进行安装&#xff0c;亲测有效&#xff01;文章末尾提供下载链接。 Ubuntu版微信客户端&#xff0c;支持托盘菜单&#xff1b;支持搜索联系人&#xff1b;…

Ubuntu22.10 安装微信方法

Ubuntu22.10 安装微信方法 Ubuntu操作系统中&#xff0c;我尝试过用wine方式安装数次都没有能够启动成功。。。 方法如下 在Ubuntu上安装微信需要使用Wine&#xff0c;Wine是一款可以在Linux系统上运行Windows应用程序的兼容层。以下是安装微信的步骤&#xff1a;安装Wine 打…

Ubuntu系统下安装微信客户端

此项目为开源项目&#xff0c;电脑需要安装git和node.js github地址: https://github.com/geeeeeeeeek/electronic-wechat # 下载项目 git clone https://github.com/geeeeeeeeek/electronic-wechat.git # 进入项目目录 cd electronic-wechat # 安装依赖包&#xff0c;成功后…

如何更换安装鸿蒙系统,华为鸿蒙系统2.0如何进行安装?鸿蒙系统2.0安装方法详细介绍...

华为鸿蒙系统2.0如何进行安装&#xff1f;现在已经可以安装鸿蒙系统2.0&#xff0c;但是你不清楚安装&#xff0c;下面就让浏览器小编为大家带来&#xff0c;鸿蒙系统2.0安装方法详细介绍。 部分更新了华为鸿蒙OS用户表示,安卓和鸿蒙的应用软件都可以玩,UI暂时没变、用户体验感…

Ubuntu系统下安装微信

安装微信实现截图发送图片功能 1.打开终端输入命令&#xff0c;更新软件源 sudo apt-get update 2.输入以下命令&#xff08;一定注意 -O- 中间是大写字母O&#xff0c;不是0也不是小写o&#xff01;&#xff01;&#xff01;&#xff09; wget -O- https://deepin-wine.…

华为鸿蒙os下载安装,华为鸿蒙系统安装包

华为鸿蒙系统安装包下载是华为打造的最新安卓手机系统&#xff0c;华为鸿蒙系统可以让手机、穿戴设备、PC等终端之间连接更稳定&#xff0c;下载之后手机使用更流畅&#xff0c;可以说是2020年最好的安卓系统&#xff0c;功能强大很稳定&#xff0c;感兴趣的用户快来下载安装吧…

鸿蒙系统如何下载使用谷歌商店

下载 实际上&#xff0c;鸿蒙系统本身是有谷歌相关的文件&#xff0c;只是不能用而已 你打开设置&#xff0c;最下面就是google相关组件 网上有大量的繁杂的教程&#xff0c;不外乎是引流到qq&#xff0c;用电脑软件连接手机完成一堆复杂的操作 所以在我的极简理念之下&…

华为鸿蒙系统开发环境安装与初识

今天了解了一下华为鸿蒙系统开发&#xff0c;作为国产系统还是要去了解一下的&#xff0c;毕竟这个系统很多设备都会用到、例如PC、手机、电视等穿戴设备都会用到。 既然要开发那么肯定要成为开发者了&#xff0c;那么就都下面的网站注册成为开发者&#xff0c;https://develop…

Ubuntu20.04系统WineHQ7.0安装微信

提供3种Ubuntu系统安装微信的方法&#xff0c;在Ubuntu20.04上验证都ok。 1.WineHQ7.0安装微信&#xff1a;ubuntu20.04安装最新版微信 --可以支持微信最新版&#xff0c;但是适配的不是特别好&#xff1b;比如WeChartOCR.exe 报错。 2. 原生微信安装&#xff1a;linux系统下的…

手机提供GMS支持(适用安卓和鸿蒙系统)

手机提供GMS支持 - 适用安卓和鸿蒙系统 前言方式1&#xff1a;安装GMS套件&#xff08;不推荐&#xff09;方式2&#xff1a;安装OurPlay&#xff08;推荐&#xff09;方式3&#xff1a;安装Gspace&#xff08;推荐&#xff09; 前言 本文提供多种为手机&#xff08;安卓和鸿蒙…

python zmail 收发谷歌邮箱邮件遇到的问题

错误信息&#xff1a; 一、Please log in via your web browser and then try again.\n5.7.14 Learn more 二、poplib.error_proto: b’-ERR [AUTH] Web login required: https://support.google 三、534, b’5.7.14 <https://accounts.google.com/signin/continue?sarp1&a…

谷歌账号Gmail邮箱修改密码提示需要手机设备验证码如何处理

谷歌邮箱账号&#xff0c;GMail邮箱在修改密码的时候老是提示需要某台手机设备的验证码&#xff0c;这种问题怎么处理呢&#xff1f; 出现这个情况&#xff0c;主要是因为你的VPN代理IP不太干净导致的&#xff0c;干净的IP一般都不提示设备验证码的&#xff0c;特别是用第三方客…

国内随时接收发送谷歌邮箱

1. 写在前面 鉴于邮箱在我们生活开发学习中很重要&#xff0c;所以我们需要选择一种邮箱&#xff0c;国内这些邮箱中比如163或者qq太容易暴露个人信息了&#xff0c;当然可以对163邮箱自定义&#xff0c;但是国内这163太泛滥了&#xff0c;很难找到。所以谷歌邮箱是一个不错的选…

java使用谷歌邮箱发送邮件

分两步&#xff1a; 1.打开开关&#xff1a;允许不够安全的应用 链接&#xff1a;https://myaccount.google.com/lesssecureapps 2.访问这个链接&#xff1a;https://accounts.google.com/DisplayUnlockCaptcha允许任何设备登陆 最后&#xff0c;请尝试在您的新设备上或在新应…

如何利用谷歌邮箱别名功能获取无限 Gmail 邮箱

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 我们注册有些国外的服务时&#xff0c;是不能用国内邮箱注册的&#xff0c;这时一个 Gmail 邮箱就显得很有必要。而有时候我们会需要注册多个账号&#xff0c;当然你可以用多个 Gma…