最新Phpmailer的使用与和thinkphp的整合

0x00:说明

1、基于最新版phpmailer,现在版本为:5.2.10。最新版本请云传送至:http://sourceforge.net/projects/phpmailer/

2、最近开发项目管理系统时,研究而来。

3、写这篇博客的原因是因为发现网上关于phpmailer的文档要么很老,要么不能使用,要么copy,要么不精简。

0x01:单独使用

1、首先去上面网址下载phpmailer,下载完成后,解压,拷贝class.phpmailer.php 和 class.smtp.php 两个文件出来。

或者直接可以点击这里从本站下载;

2、将两个文件放入网站根目录下,并新建一个php文件,其代码如下:

<?php
header("Content-type: text/html;charset=utf-8");
require 'class.phpmailer.php';
require 'class.smtp.php';
$body = "<b>哈哈哈哈测试发送成功a </b>";

$mail = new PHPMailer();
$mail->Charset = 'utf-8';
$mail->isSMTP(); //开启smtp
$mail->Host = 'smtp.exmail.qq.com'; //设置smtp地址
$mail->Port = '465'; //设置smtp端口
$mail->SMTPSecure = 'ssl'; //加密
$mail->SMTPAuth = true;  //smtp认证开启
$mail->Username = 'system@yanda.net.cn';  //发送者邮件地址
$mail->Password = '123456798'; //密码
$mail->isHTML(); //邮件正文使用html
$mail->addAddress('admin@yanda.net.cn'); //添加接受者
$mail->addAttachment('D:\myweb\www\resume.html', '简历.zip'); //如果没有附件需求,删除该行即可
$mail->setFrom('system@yanda.net.cn');  //设置发送者,一般和username相同
$mail->Subject = '测试phpmailer发邮件';  //邮件主题
$mail->Body = $body; //邮件正文
if(!$mail->Send()) {
	echo "Mailer Error: " . $mail->ErrorInfo;
} else {
	echo "Message has been sent";
}

以上代码是最精简的phpmailer使用代码。每行代码已经在后面进行了相应的注释,同学们可以直接进行查看其作用。如果还是不知道的话,可以直接留言。

3、本地测试下

发送成功

phpmailer1

0x02:与thinkphp的整合

我们知道thinkphp3.2.3版本是带有命名空间的,所以,与TP的整合如下:

1、为了命名统一规范,我们先将class.phpmailer.php 和 class.smtp.php重命名为PHPMailer.class.php 和 SMPT.class.php。

2、将这两个文件放入 Application\Common\Lib\Mail 中。

同时在phpmailer.class.php的最上方增加以下代码:

namespace Common\Lib\Mail;
use Common\Lib\Mail\SMTP;
use \Exception;

文件看起来像这样:

<?php
namespace Common\Lib\Mail;
use Common\Lib\Mail\SMTP;
use \Exception;

……

再在SMPT.class.php 文件的上方加入下面的代码

namespace Common\Lib\Mail;
use \Exception;

以上代码的作用是定义文件类的命名空间。加入

use \Exception;

是因为两个类中均使用了php的自带的Exception。网上有些代码不能使用的原因就是因为这个。

3、以上两个文件处理完成之后,我们重新在Mail目录下新建一个文件 mail.class.php 整合整个phpmailer类,使其当做mail入口类:

<?php
namespace Common\Lib\Mail; 
use Common\Lib\Mail\PHPMailer;
class mail { 
    public function send($to, $subject, $body) {
        $mail = new PHPMailer();
        $mail->isSMTP();
        $mail->Host = C('MAIL_HOST');
	$mail->Port = C('MAIL_PORT');
	$mail->SMTPSecure = 'ssl';
	$mail->SMTPAuth = true;
	$mail->Username = C('MAIL_USERNAME');
	$mail->Password = C('MAIL_PASSWORD');
        $mail->isHTML();
	$mail->addAddress($to);
	$mail->setFrom(C('MAIL_USERNAME'), 'noreply');
	$mail->Subject = $subject;
	$mail->Body = $body;
	if(!$mail->Send()) {
		return array('code'=>0,'msg'=>$mail->ErrorInfo);
	} else {
		return array('code'=>1);
	}
    }
}

其中的C函数我想大家不会陌生吧,所以在此就不多说啦。

4、使用

接下来,我们就可以直接在Controller中使用了:

<?php 
namespace Home\Controller;
use Think\Controller;
use Common\Lib\Mail\mail;

class ReminderController extends Controller
{
    public function mail(){
        $mail = new mail();
        $body = '<h1>提醒日程</h1>';
        $m = $mail->send('admin@yanda.net.cn', '今日日程', $body);
        if ( $m['code'] == 1 ) {
	        echo "success";
        } else {
	        echo $m['msg'];
        }
    }
}

当然,我们也可以在function.php中写成一个全局函数,具体的实现方法大家可以自己实现哦。当然,如果有什么不明白的还是可以留言的。

本文链接:最新Phpmailer的使用与和thinkphp的整合

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:@闫嵩达,谢谢!^^


最新Phpmailer的使用与和thinkphp的整合》上有4条评论

    1. 闫嵩达 文章作者

      您好,感谢您的关注。这个问题是由于控制器中没有引用类文件造成的。

      在头部

      use CommonLibmail;

      即可。

      感谢!

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注