最近学习PHP的发送邮件功能,在ThinkPHP最新的版本ThinkPHP3.2下使用PHPMailer发送邮件一直出现各种问题,现将出现的情况整理如下
一:使用配置
1.以搭建好的ThinkPHP3.2框架及目录结构和PHPMailer5.1源码包,将PHPMailer压缩包解压并复制到项目ThinkPHP\Library\Vendor下并更名为PHPMailer,项目配置完毕
2.修改配置文件php.ini打开extension=php_openssl.dll(即去掉前面的分号)
所需基本配置完毕
二:示例代码
例如在IndexController的index方法中添加以下代码
注意:使用前请务必将自己的免费smtp邮箱设置开启smtp的功能,否则会一直报用户名和密码错误
header('Content-type:text/html;charset=utf-8');
//从PHPMailer目录导入class.phpmailer.php类文件
vendor("PHPMailer.class#phpmailer");
$config = array(
'host'=>'smtp.qq.com',
'port'=>'465',
'user'=>'xxx@qq.com', //自己免费smtp服务器的的用户名
'password'=>'xxx', //密码
'from'=>'xxx@qq.com', //发件人
'fromname'=>'加油', //发件人名称
);
//这里的配置信息可以添加到项目的配置文件config.php中
$mail=new \PHPMailer();
//这反斜线是必须的,以前就是这里一直报找不到类的错误,因为没有使用名称空间这里加上反斜线表示全局名称空间
// 设置PHPMailer使用SMTP服务器发送Email
$mail->IsSMTP();
$mail->SMTPSecure = "ssl"; //打开SSL
$mail->SMTPDebug = 1; // 启用SMTP调试功能
// 设置邮件的字符编码,若不指定,则为'UTF-8'
$mail->CharSet='UTF-8';
// 添加收件人地址,可以多次使用来添加多个收件人
$mail->AddAddress("xxx@qq.com","xx");
date_default_timezone_set('PRC');//设置默认时区否则会出现时间不一致问题
$time=date("Y年m月d日 H:i.s");
echo $time;
// 设置邮件正文
$mail->Body="正在测试发送邮件功能!".$time;
// 设置邮件头的From字段。
$mail->From=$config['from'];
// 设置发件人名字
$mail->FromName=$config['fromname'];
// 设置邮件标题
$mail->Subject="测试功能";
// 设置SMTP服务器。
$mail->Host=$config['host'];
$mail->Port= $config['port'];
// 设置为"需要验证"
$mail->SMTPAuth=true;
// 设置用户名和密码。
$mail->Username=$config['user'];
$mail->Password=$config['password'];
// 发送邮件。
if($mail->Send()){
echo "发送成功!";
}else{
echo "发送失败";
}
这里都写到控制器的一个方法里,你可以根据情况自己定制将其分离开来,祝您成功,编程顺利!!