thinkPHP发送邮件
欢迎大家访问我的主页:西城Gether学习网
我的博客:浅作序
1. 使用composer安装phpmailer组件
进入Packmailer官网,搜索phpmailer组件。
-
在项目目录下使用命令
composer require phpmailer/phpmailer
安装组件。- 安装成功后,你就可以找到vendor/phpmailer文件夹。
-
在 Packmailer官网的phpmailer 页面找到:
A Simple Example
<?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; //Load Composer's autoloader require 'vendor/autoload.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'user@example.com'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; // TCP port to connect to //Recipients $mail->setFrom('from@example.com', 'Mailer'); $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient $mail->addAddress('ellen@example.com'); // Name is optional $mail->addReplyTo('info@example.com', 'Information'); $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); //Attachments $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo; }
我的例子:
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: // +---------------------------------------------------------------------- // 应用公共文件 // 邮箱 use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; function mailto($to, $nickname, $title, $content) { // 实例化 $mail = new PHPMailer(true); try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output 2调试模式 0用户模式 $mail->isSMTP(); // Set mailer to use SMTP $mail->CharSet = 'utf-8'; // 设置右键格式编码 $mail->Host = 'smtp.qq.com'; // Specify main and backup SMTP servers smtp服务器的名称 $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = '1225388159@qq.com'; // SMTP username $mail->Password = 'amltoqg*uuidhjff'; // SMTP password 此为QQ授权码。 $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted 目前规定必须使用ssl,非ssl的协议已经不支持了 $mail->Port = 465; // TCP port to connect to ssl协议,端口号一般是465 //Recipients $mail->setFrom('1225388159@qq.com', 'Gether管理员'); // 设置右键发送人信息(邮箱, 昵称) $mail->addAddress($to, $nickname); // 设置收件人信息(邮箱, 昵称) // $mail->addAddress('ellen@example.com'); // Name is optional // $mail->addReplyTo('info@example.com', 'Information'); // $mail->addCC('cc@example.com'); // $mail->addBCC('bcc@example.com'); // // //Attachments 附件 // $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments // $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = $title; // 设置发送的邮件标题 $mail->Body = $content; // 设置邮件发送内容 // $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; return $mail->send(); } catch (Exception $e) { exception($mail->ErrorInfo,1001); // 失败抛出错误信息 } }
-
在你的PHP项目中,找到application/common.php创建公用的PHP函数。
use PHPMailer\PHPMailer\PHPMailer; // 引用 use PHPMailer\PHPMailer\Exception; function mailto($to, $nickname, $title, $content) // 传入参数(收件人邮箱,收件人昵称,邮件标题,邮件内容) { ··· }
这时候,跑起你的PHP程序~! :)
-
!!!尽然报错了?!
-
坑点1:
Extension missing: openssl.
-
解决方法:
什么是openssl?
关于openssl,我说的不如百度百科齐全,还是看看百度百科的解释吧!http://baike.baidu.com/view/300712.htm
php开启openssl的方法,大多数情况下openssl是没有开启的,要想启用需要进行下简单的设置:
windows下开启方法:
- 找到 php安装目录\PHPTutorial\php\对应版本\php.ini
- 首先检查php.ini中
;extension=php_openssl.dll
是否存在, 如果存在的话去掉前面的注释符‘;’, 如果不存在这行,那么添加extension=php_openssl.dll
。 - 将下的: php_openssl.dll, ssleay32.dll, libeay32.dll 3个文件拷贝到 WINDOWS\system32\ 文件夹下。
- 如果没有 php_openssl.dll ,点击下载 php_openssl.dll。
- 下载下来有很多个php_openssl,找到你相应php版本下面的php_openssl。
查看php版本可以用如下代码:
<?php phpinfo(); ?>
找到相应版本之后,按照上面讲的第二步来就可以了。
- 重启apache或者iis,至此,openssl功能就开启了。
-
-
坑点2:
SMTP connect() failed.
配置QQ邮件服务器和端口号:接收邮件服务器:pop.qq.com,使用SSL,端口号995
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587
账户名:您的QQ邮箱账户名(如果您是VIP帐号或Foxmail帐号,账户名需要填写完整的邮件地址)
密码: 查看下一步,使用授权码登陆。
电子邮件地址:您的QQ邮箱的完整邮件地址1、什么是授权码?
授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。
适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。
温馨提醒:为了你的帐户安全,更改QQ密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。
2、怎么获取授权码?
先进入设置-》帐户页面找到入口,按照以下流程操作。
(1)选择第一项,点击“开启”
[图片上传失败...(image-265eaf-1535877689457)]
(2)验证密保
[图片上传失败...(image-8d2d51-1535877689457)]
(3)获取授权码
[图片上传失败...(image-54e8d0-1535877689457)]
3、在第三方客户端怎么设置?
在第三方客户端的密码框里面输入16位授权码进行验证。
-
-
至此,就可以愉快的使用邮件功能了。
让我们测试一下吧!
- 注册
- 去邮箱查看一下吧
成功!成功!成功!成功!成功!
欢迎大家访问我的主页:西城Gether学习网
我的博客:浅作序
2018/9/2 上午10:19:01