将PHPMailer整合到ThinkPHP中实现SMTP发送邮件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将PHPMailer整合到ThinkPHP中实现SMTP发送邮件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3095字,纯文字阅读大概需要5分钟。
内容图文
![将PHPMailer整合到ThinkPHP中实现SMTP发送邮件](/upload/InfoBanner/zyjiaocheng/1314/ade05608c49e4ae288f04a50e706196f.jpg)
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
<?php
|
return
array
(
|
// 配置邮件发送服务器
|
‘MAIL_SMTP‘ =>TRUE, |
‘MAIL_HOST‘ => ‘邮件发送SMTP服务器‘ , |
‘MAIL_SMTPAUTH‘ =>TRUE, |
‘MAIL_USERNAME‘ => ‘SMTP服务器登陆用户名‘ , |
‘MAIL_PASSWORD‘ => ‘SMTP服务器登陆密码‘ , |
‘MAIL_SECURE‘ => ‘tls‘ , |
‘MAIL_CHARSET‘ => ‘utf-8‘ , |
‘MAIL_ISHTML‘ =>TRUE, |
);
|
?>
|
具体的配置可以根据自己的需要添加。根据PHPMailer的规则自己定义就可以了,然后再在定义函数中使用大C(‘CONF_NAME’)方法来调用就可以了。
再接下来就需要在common文件夹下的function.php文件中定义邮件发送函数sendMail(),如果function.php文件 不存在的话新建一个就可以了。而且这个function.php文件中的方法可以在全局使用,不需要先引入function.php文件。
在方法中需要引入PHPMailer时,不是通过import关键字来实现的,而是通过公共方法vendor()方法来实现的。具体内容如下:
<?php
|
/**
|
* 邮件发送函数
|
*/
|
function
sendMail(
$to
,
$subject
,
$content
) {
|
vendor(
‘PHPMailer.class#PHPMailer‘
);
|
$mail
=
new
PHPMailer();
|
// 装配邮件服务器
|
if
(C(
‘MAIL_SMTP‘
)) {
|
$mail
->IsSMTP();
|
}
|
$mail
->Host = C(
‘MAIL_HOST‘
);
|
$mail
->SMTPAuth = C(
‘MAIL_SMTPAUTH‘
);
|
$mail
->Username = C(
‘MAIL_USERNAME‘
);
|
$mail
->Password = C(
‘MAIL_PASSWORD‘
);
|
$mail
->SMTPSecure = C(
‘MAIL_SECURE‘
);
|
$mail
->CharSet = C(
‘MAIL_CHARSET‘
);
|
// 装配邮件头信息
|
$mail
->From = C(
‘MAIL_USERNAME‘
);
|
$mail
->AddAddress(
$to
);
|
$mail
->FromName =
‘憨豆儿笑园‘
;
|
$mail
->IsHTML(C(
‘MAIL_ISHTML‘
));
|
// 装配邮件正文信息
|
$mail
->Subject =
$subject
;
|
$mail
->Body =
$content
;
|
// 发送邮件
|
if
(!
$mail
->Send()) {
|
return
FALSE;
|
}
else
{
|
return
TRUE;
|
}
|
}
|
?>
|
到这一步,我们已经将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属性可以获取到!
原文:http://my.oschina.net/BearCatYN/blog/299192
内容总结
以上是互联网集市为您收集整理的将PHPMailer整合到ThinkPHP中实现SMTP发送邮件全部内容,希望文章能够帮你解决将PHPMailer整合到ThinkPHP中实现SMTP发送邮件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。