将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明。
ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMailer整合到ThinkPHP中吧。
PHPMailer是不符合ThinkPHP规范的插件程序,所以,我们需要先将PHPMailer程序放到ThinkPHP的 Library/Vendor目录下,我这里是最新版的ThinkPHP 3.2,如果是是ThinkPHP 3.2之前的版本,可能就是Lib目录了。Vendor目录专门用于存放非标准ThinkPHP插件的目录,如下:

PHPMailer整合到ThinkPHP中的存放目录
接下来为了方便发送邮件,我们可以定义一个专门发送邮件的函数sendMail(),这个函数可以只接受邮件发送的最基本的参数,发送到哪个邮 箱$id,邮件的主题$subject,邮件的内容$content。不过为了方便我们修改SMTP邮件发送服务器,我们先在config.php文件中 定义好邮件发送服务器,内容如下:
config.php
1 <?php
2 return array(
3 // 配置邮件发送服务器
4 'MAIL_SMTP' =>TRUE,
5 'MAIL_HOST' =>'邮件发送SMTP服务器',
6 'MAIL_SMTPAUTH' =>TRUE,
7 'MAIL_USERNAME' =>'SMTP服务器登陆用户名',
8 'MAIL_PASSWORD' =>'SMTP服务器登陆密码',
9 'MAIL_SECURE' =>'tls', //注此功能需要在php.ini文件中开启extension=php_openssl.dll功能支持(本人在这里吃了一个亏)
10 'MAIL_CHARSET' =>'utf-8',
11 'MAIL_ISHTML' =>TRUE,
12 );
13 ?>
具体的配置可以根据自己的需要添加。根据PHPMailer的规则自己定义就可以了,然后再在定义函数中使用大C(‘CONF_NAME’)方法来调用就可以了。
再接下来就需要在common文件夹下的function.php文件中定义邮件发送函数sendMail(),如果function.php文件 不存在的话新建一个就可以了。而且这个function.php文件中的方法可以在全局使用,不需要先引入function.php文件。
在方法中需要引入PHPMailer时,不是通过import关键字来实现的,而是通过公共方法vendor()方法来实现的。具体内容如下:
1 <?php
2 /**
3 * 邮件发送函数
4 */
5 function sendMail($to, $subject, $content) {
6 vendor('PHPMailer.class#PHPMailer');
7 $mail = new PHPMailer();
8 // 装配邮件服务器
9 if (C('MAIL_SMTP')) {
10 $mail->IsSMTP();
11 }
12 $mail->Host = C('MAIL_HOST');
13 $mail->SMTPAuth = C('MAIL_SMTPAUTH');
14 $mail->Username = C('MAIL_USERNAME');
15 $mail->Password = C('MAIL_PASSWORD');
16 $mail->SMTPSecure = C('MAIL_SECURE');
17 $mail->CharSet = C('MAIL_CHARSET');
18 // 装配邮件头信息
19 $mail->From = C('MAIL_USERNAME');
20 $mail->AddAddress($to);
21 $mail->FromName = '憨豆儿笑园';
22 $mail->IsHTML(C('MAIL_ISHTML'));
23 // 装配邮件正文信息
24 $mail->Subject = $subject;
25 $mail->Body = $content;
26 // 发送邮件
27 if (!$mail->Send()) {
28 return FALSE;
29 } else {
30 return TRUE;
31 }
32 }
33 ?>
到这一步,我们已经将PHPMailer整合到了ThinkPHP中了,现在可以在程序中任何地方使用sendMail()方法就行了,不需要引入function.php文件,因为ThinkPHP会自动到这个文件中寻找。
ThinkPHP 3.2中vendor()方法的深入研究及PHPMailer的正确扩展
当我们想在ThinkPHP中引入第三方扩展,而第三方扩展又没有按照ThinkPHP的规范在编写的时候时,就需要将第三方扩展放置到Library/Vendor目录下,当然,这是针对ThinkPHP 3.2而言,低版本则根据情况来看了。
然后需要在Controller或function中使用第三方扩展时,就可以直接使用vendor()方法来进行引用了。
不过当我将PHPMailer放在Vendor目录下后(具体可以参考前面的一篇博客:http://www.xcoder.cn/index.php/archives/889),在本机运行得好好得,最近将程序上传到服务器上时,直接提示
Class ‘PHPMailer’ not found
然后又在本机运行,还是正确!通过前面这片博客可以知道,我是通过
vendor('PHPMailer.class#PHPMailer');
这行代码将PHPMailer引入的。既然提示找不到PHPMailer类,说明没有被正确引入。这是为什么呢?就粗略看了一下vendor()方 法的源码,这才发现其实vendor()方法也就是对import()方法进行了一次参数组装,然后还是交给了import()方法处理。
查看import()方法的源码又发现,在import()方法中,对于上面传入参数的解析其实就是将’.’替换成’/’,将’#’替换成 了’.’,baseurl则由vendor()方法自动补充上了,指向Vendor目录。所以上面vendor()方法中的参数最终还是被解析成了如下目 录:
Library/Vendor/PHPMailer/class.PHPMailer.php
而PHPMailer的入口文件的实际目录地址为:
Library/Vendor/phpmailer/class.phpmailer.php
内容都一样的嘛!不过我用的是Linux的服务器,所以对大小写是严格区分的,这样当然不能成功导入这个类。而解决办法就是将vendor()引入改为:
vendor(‘phpmailer.class#phpmailer’)
另外对于PHPMailer使用时还要注意一点,PHPMailer如果使用SMTP方式发送邮件,需要PHP对fsockopen的支持,所以我们需要修改php.ini中disable_functions中将fscokopen删除,否则会出现运行错误:
fsockopen() has been disabled
通过PHPMailer的ErrorInfo属性可以获取到!
将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件的更多相关文章
- 使用System.Net.Mail中的SMTP发送邮件(带附件)
System.Net.Mail 使用简单邮件传输协议SMTP异步发送邮件 想要实现SMTP发送邮件,你需要了解这些类 SmtpClient :使用配置文件设置来初始化 SmtpClient类的新实例. ...
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
Laravel 和 Laravel 的邮件发送使用方式完全一致.Laravel 的邮件发送中文文档在:http: 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件. 配置 修改邮 ...
- Python中使用SMTP发送邮件以及POP收取邮件
假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...
- python中的SMTP发送邮件
一. 介绍 python3中自带了smtplib模块和email模块 smtplib模块:负责与邮件服务器的交互 email模块:负责组织邮件内容 二. smtplib模块 smtplib模块:主要是 ...
- 在CI中集成phpmailer,方便使用SMTP发送邮件
直接使用phpmailer的话,有时候不是很方便,特别你的很多功能都是基于CI完成的时候,要相互依赖就不方便了,所以在想,那是否可以将phpmailer集成到CI中呢,像使用email类这样使用他,功 ...
- 东正王增涛浅析OA信息化整合平台系统在企业中的应用价值
王增涛说OA信息化整合平台系统作为企业管理中最基础的管理软件,已在企业成长道路上存在多年,它的应用开启了智能移动办公的先河,也让企业的办公流程管理更加的便捷.高效.流畅.省时.省力,它的使用不但让企业 ...
- thinkphp <volist>标签中 <if> 判断的写法
thinkphp <volist>标签中 <if> 判断的写法 <volist name="data" id="vo"> & ...
- hibernate4整合spring3.1的过程中的异常问题
(1)hibernate4整合spring3.1的过程中,发现了java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider异常 ...
- thinkphp在模板中使用php的函数
thinkphp在模板中使用php的函数 使用 {:函数名} 的形式 例如: // 获取 session 中存的值 {:session('admin.loginname')} // 输出当前日期 {: ...
随机推荐
- 2022年官网下安装MongoDB最全版与官网查阅方法(5.0.6)
一.下载安装 1.百度搜索,找到官网,或直接访问:https://www.mongodb.com/ 2.寻找下载位置,双击下载. 3.找到本地位置,双击执行,进入欢迎界面,选择next. 4.勾选协议 ...
- ArcGIS进行容积率计算
空间分析--题目2 容积率(Plot Ratio/Floor Area Ratio/Volume Fraction)又称建筑面积毛密度,是指一个小区的地上总建筑面积与用地面积的比率.对于开发商来说,容 ...
- Makefile 入门(加减乘除实现)
Makefile 入门(加减乘除实现) 准备 使用任意Linux发行版即可,本文使用WSL Ubuntu. 开始之前,需要安装必要的工具: sudo apt install make g++ 开始 1 ...
- SpringSecurity-5.11-课堂笔记-01
- Wireshark DTN解析器拒绝服务漏洞
受影响系统:Wireshark Wireshark 2.2.0 - 2.2.1Wireshark Wireshark 2.0.0 - 2.0.7描述:CVE(CAN) ID: CVE-2016-937 ...
- table元素使用bug
一.问题的产生 javaWeb课上老师让我们用表单做一个简单的自我介绍,但是在对表单里的单元格进行合并时出现了变形的情况,这里做个记录. 二.实验 让我们先做一个简单的4*4表格 <!DOCTY ...
- async-validator 源码学习笔记(五):Schema
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量
一.windows配置各种环境变量后 path 路径下的目录: 二.windows 配置各种环境变量的目的: 为windows系统添加上各种环境对应的命令 举例,为什么要添加jdk的bin目录,是因为 ...
- Prim算法求最小生成树
首先在介绍这个算法之前我们要之明确一下什么是最小生成树的概念: 由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 ...
- Azure DevOps (七) 通过SSH部署上传到服务器的应用
上一篇中,我们实现了通过FTP把流水线编译出来的制品上传到我们的公网服务器上,这一篇我们来研究一下通过azure的ssh连接到服务器 把应用在服务器上运行起来. 首先,我们书接上文,在release流 ...