ThinkPHP3.2使用PHPMailer发送邮件

首先下载PHPMailer,直接在百度搜下,然后下载就好了。

接着注册一个新浪邮箱,用作发件人邮箱。qq和163邮箱都不稳定,有时邮件发不出去。

解压下载的文件(如果是压缩包),得到PHPMailer文件夹,文件夹下有以下文件:

紧接着把这个文件夹放到ThinkPhp中的Library中的Vendor下,具体路径为:项目文件夹\ThinkPHP\Library\Vendor\,

如图:

到这里,PHPMailer就算加入到Thinkphp3.2中了。

使用方法:

打开Application\Common\Common\function.php(如果没有这个文件,则新建一个):

加入以下代码:

/*
	发送验证邮箱
<span style="white-space:pre">	</span>$to为收件人邮箱地址
<span style="white-space:pre">	</span>C()函数表示从配置文件config.php中获得

*/
function sendMail($to){

    //Vendor('PHPMailer.PHPMailerAutoload');  

    vendor('PHPMailer.class#PHPMailer');
    vendor('PHPMailer.class#SMTP');

    $mail = new PHPMailer(); //实例化
    $mail->IsSMTP(); // 启用SMTP
    $mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以新浪邮箱为例)
    $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
    $mail->Username = C('MAIL_USERNAME'); //发件人邮箱名,从config.php中获得
    $mail->Password = C('MAIL_PASSWORD') ; //发件人邮箱密码
    $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
    $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
    $mail->AddAddress($to,"尊敬的客户");
    $mail->WordWrap = 50; //设置每行字符长度
    $mail->Port = 25;
    $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件
    $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
    $mail->Subject ='helloworld'; //邮件主题
    $mail->Body = 'This email is sent by PHPMailer!'; //邮件内容
    $mail->AltBody = "这是一个纯文本的身体在非营利的HTML电子邮件客户端"; //邮件正文不支持HTML的备用显示

    $result = $mail->Send();

    return $result;
}

保存并退出。

请注册

接着打开Application\Common\Conf\config.php,加入以下代码:

<?php
return array(

    'MAIL_HOST' =>'smtp.sina.com',//smtp服务器的名称,这里用的是新浪邮箱,qq: smtp.qq.com , 163:smtp.163.com
    'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
    'MAIL_USERNAME' =>'[email protected]',//发件人邮箱名,注意换成你注册的新浪邮箱地址
    'MAIL_FROM' =>'[email protected]',//发件人邮箱地址,注意换成你注册的新浪邮箱地址
    'MAIL_FROMNAME'=>'liujan',//发件人姓名
    'MAIL_PASSWORD' =>'*****',//密码,请填上发件人邮箱密码
    'MAIL_CHARSET' =>'utf-8',//设置邮件编码
    'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件
);

?>

保存并退出。

接着打开Home下的IndexController,

加入函数sendMail:

public function sendMail(){

	$email = '[email protected]';  //收件人邮箱地址
	sendMail($email);
}

保存并退出。

在浏览器中输入一下地址:

http://localhost/thinkphp/Home/Index/sendMail

如果你的收件人邮箱地址有效,并且发件人邮箱地址和密码都正确的话,此时应该能正常发送邮件。上你的收件邮箱看下吧。

如果要用phpmailer来发送注册账户时的激活邮箱,则可以在数据库中给user表加上三个字段,reg_time(注册时间),status(0表示未激活,1表示已激活),verify_code(表示激活码)

然后用户注册时,以其输入的用户邮箱,密码加上当前时间利用md5来生成一个激活码verify_code:

$data['verify_code'] = md5($data['user_email'].$data['user_pwd'].$data['reg_time']);

然后再向用户输入的发送激活链接。

接着把用户输入的数据,注册时间,生成的激活码,写入数据库,注意status要为0

激活链接的内容主要是刚才生成的激活码,和用户点击激活链接时的处理函数,

比如我的激活链接样例是:

http://localhost/Mr.Pan/?m=Home&c=User&a=active&verify_code=687ae065b161d6968086ef08af3a2c0e

然后把

我在Home模块下的UserController里写了一个函数active,主要用来判断激活链接中的激活码是否和数据库中的一样,如果一样,则激活账户,否则激活失败;并且该链接只在24小时内有效,该函数内容如下:

public function active(){
	if (IS_GET){
		$verify_code = I("verify_code");
		$user = D("User");
		$data = $user->where("verify_code='$verify_code'")->find();  //找出数据库中verify_code和激活链接中的verify_code相同的那条记录
		if (!empty($data)){
			$user_id = $data['user_id'];
			if ($data['status'] == 0){
				$current_time = date("Y-m-d H:i:s", strtotime("-1 day"));  //得到24小时前的时间
				if ($data['reg_time'] < $current_time){  //判断是否在24小时内
					echo  "您的激活有效期已过,请重新注册发送激活邮件";
					$user->where("user_id='$user_id'")->delete();
					return false;
				}
				else{
					$data['status'] = 1;  //激活成功
					if ($user->where("user_id='$user_id'")->save($data)){
						return true;
					}
					else{
						echo "激活失败,请重新注册";
						$user->where("user_id='$user_id'")->delete();
						return false;
					}
				}
			}
			else{
				 return true;
			}
		}
		else{
			echo "激活失败,请重新注册";
			return false;
		}
	}
}

常见错误:

1. CLASS phpmailer not found:

解决方法:

进入Vendor中,打开class.phpmailer.php文件,将类名复制下,然后将class.phpmailer.php文件名中的phpmailer改成刚才复制的。同时在function.php文件中的vendor中class#后面的类名phpmailer都

改成刚才复制的。

2. PHPMailer错误SMTP Error: Could not connect to SMTP host

解决办法:

打开Vendor下的class.smtp.php,找到$this->smtp_conn = @fsockopen($host,// the host of the server

然后改成$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno,  $errstr,  $tval);

打开class.phpmailer.php,找到函数 IsSMTP(),把$this->Mailer = ‘smtp‘ 改成 $this->Mailer = ‘SMTP‘,

同时把572-579行的case ‘smtp‘改成case ‘SMTP‘

3. 出现$mail->send()返回值一直为1(true)的情况

解决方法:

请把class.phpmailer.php中第572-579行中的

case ‘smtp‘改成case ‘SMTP‘

出现无法通过验证时,请把发件人的Username和From都设为你的邮箱(最好用新浪邮箱,qq和163有时会出现这种错误)

时间: 2024-11-10 10:40:35

ThinkPHP3.2使用PHPMailer发送邮件的相关文章

新测 thinkphp3.2 整合 PHPMailer 发送邮件

PHPMailer 的官方网站:http://phpmailer.worxware.com/ PHPMailer 最新类库下载地址:[点击下载] PHPMailer GitHub 下载地址:https://github.com/Synchro/PHPMailer,该页面也提供了使用例子,不过不是很全面. 参考 http://my.oschina.net/BearCatYN/blog/299192    的的博文 只选择了其中目录设置的部分 参考 http://jingyan.baidu.com/

Thinkphp3.2 PHPMailer 发送邮件

Thinkphp3.2 PHPMailer 发送邮件结合QQ企业邮箱发送邮件 下载附件PHPMailer解压到ThinkPHP\Library\Vendor 在Common文件夹新建function.php /** * 邮件发送函数 */ function sendMail($to, $title, $content) { Vendor('PHPMailer.PHPMailerAutoload'); $mail = new PHPMailer(); //实例化 $mail->IsSMTP();

用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法

之前做项目的时候做了一个用phpmailer发送邮件的功能<CI框架结合PHPmailer发送邮件>,昨天步署上线(刚开始用新浪云,嫌贵,换成阿里了),测试的时候,发送邮件却意外报错了.......... 我擦,没上线的时候好好的,次次成功,刚开始我以为是smtp地址的问题(我用的163邮箱),后来改成了QQ邮箱,发现还是没有用,没办法,只好问度娘了,后来看着百度上的答案才明白除了google的smtp服务器收到请求"smtp"会接受,其他的服务器就像我用的163,QQ什么

YII 邮件发送 phpmailer发送邮件!Yii自定义类引用

第一步:下载phpmailer解压后得到以下三个文件 class.phpmailer.php class.pop3.php class.smtp.php 将class.phpmailer.php改名成phpmailer.php并把三个文件放到 /protected/extensions/PHPMailer/目录下 修改一下phpmailer.php文件,添加init方法 public static function init(){ return new PHPMailer(); } 第二步:修改

TP5使用PHPMAILER发送邮件

TP使用PHPMAILER发送邮件 1.申请一个SMTP服务的邮箱. 我申请的是smtp.163.com的服务,注意SMTP服务密码不是登陆密码,需要单独设置 2.下载phpmailer类库文件http://pan.baidu.com/s/1kUNK9vx 3.将PHPMAILER类库中的class.phpmailer.php和class.smtp.php文件取出来,并重新命名为符合tp5命名规范的Phpmailer.php和Smtp.php 4.在项目根目录下的extend文件夹中,建立php

使用PHPmailer发送邮件的详细代码

一.使用PHPMailer发送邮件的原因 PHP有内置的mail()方法,但是由于一些主机空间不支持该方法,所以经常会遇到无法发送邮件的情况. 所以,可以下载PHPMailer类,实现邮件发送. 二.发送邮件的具体步骤 1.先保证发件人的邮箱开启了SMTP服务. 在这里设置,截图如下: 设置好了就接着往下看, 2.下载的PHPMailer中,拷贝class.phpmailer.php和class.smtp.php到项目目录下 sendmail.php <?php /** * 2014-08-25

Thinkphp使用PHPMailer发送邮件遇到的问题

第一次使用ThinkPHP编写”找回密码“功能,按照网上的DEMO做完后,试了好几个邮箱都不管用,试了半天终于成功了,以下是我的实现过程: 第一步:准备PHPMailer 首先下载PHPMailer扩展,谷歌一下就有了.然后将下载的PHPMailer整个文件夹放到ThinkPHP文件夹里面的Vendor目录下. 第二步:修改配置文件 向conf.php配置文件中添加以下内容: 'THINK_EMAIL' => array( 'SMTP_HOST' => 'smtp.sina.com', //S

利用PHPMailer发送邮件时报错

利用thinkphp集成PHPMailer发送邮件时报错:Failed to connect to server: Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP 解决办法: 1.既然是ssl错误,习惯性的从php.ini中相应行打开支持,(extension=php_openssl.dll),服务器是windows主机,重启iis发现竟然还是不支持?

PHPMailer 发送邮件(二)

发现PHPMailer又做了较大的更新,以前发送邮件的方法已不太适用,刚好要做一个实验,需要搭建个环境,这里使用Gmail进行测试,现记录下来. 传送地址Github: PHPMailer 基本要求的内容跟之前的文章是一样的: phpmailer 发送邮件(一)  一.基本要求 Web访问正常(apache可以正常访问) php 设置正确(Sockets Support.OpenSSL support 两项设置为enable) gmail设置, 允许不够安全的应用:设置为已启用 可以写一个简单的