php 发送邮件 tp5,tp5.1 使用 phpmailer 发送电子邮件

tp5.1 使用 phpmailer 发送电子邮件

简介

phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。

phpMailer 的特点:

在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。

平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。

支持嵌入图像,附件,HTML 邮件。

可靠的强大的调试功能。

支持 SMTP 认证。

自定义邮件头。

支持 8bit、base64、binary 和 quoted-printable 编码。

安装

使用 composer 安装:

composer require phpmailer/phpmailer

邮件服务配置

发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。

网易邮箱配置如下图:

4805862f409c5807449e15fdfe829c3f.png

QQ 邮箱相关配置如下图:

邮箱

POP3服务器(端口995)

SMTP服务器(端口465或587)

qq.com

pop.qq.com

smtp.qq.com

这里以163邮箱配置作为示例

设置邮箱客户端授权码

找到设置

2d2eac79a30d08b9c4ffbaff2f363f42.png

开启服务

72b0df10896e3dbf60853b717e6d0ac6.png

开启服务器之后会有显示,注意授权码只显示一次,开启过程中注意保存

a5fbe143f71dce73eb6ba7147e030b1a.png

对PHPMailer类库使用进行封装

在extends下 创建\mail\Mail.php

dbf6046d718edafc12288f9d28180b86.png

文件内容如下

namespace mail;

//引入邮件类,tp5.1只要有命名空间会自动加载

use PHPMailer\PHPMailer\PHPMailer;

class Mail

{

//服务器配置,一般是默认配置

private $CharSet ="UTF-8"; //设定邮件编码

private $SMTPDebug = 0; // 调试模式输出

private $isSMTP = true; // 使用SMTP

private $Host = 'smtp.163.com'; // SMTP服务器

private $SMTPAuth = true; // 允许 SMTP 认证

private $Username = '邮箱用户名'; // SMTP 用户名 即邮箱的用户名

private $Password = '密码或者授权码'; // SMTP 密码 部分邮箱是授权码(例如163邮箱)

private $SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议

private $Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持

//修改成自己的邮箱

private $From = 'xxx@163.com'; //发件人邮箱

private $FromName = 'makalo'; //发件人的用户昵称

//邮件对象

private $mail;

//一般只有用户名和密码还有端口会变动,所以这三个参数可以创建对象动态指定,也可以直接写死

public function __construct($Username = '', $Password = '', $Port = ''){

if(!empty($Username)){

$this->Username = $Username;

}

if(!empty($Password)){

$this->Password = $Password;

}

if(!empty($Port)){

$this->Port = $Port;

}

//为true表示启用异常

$mail = new PHPMailer(true);

//服务器配置

$mail->CharSet = $this->CharSet; //设定邮件编码

$mail->SMTPDebug = $this->SMTPDebug; // 调试模式输出

if($this->isSMTP === true){

$mail->isSMTP(); // 使用SMTP

}

$mail->Host = $this->Host; // SMTP服务器

$mail->SMTPAuth = $this->SMTPAuth; // 允许 SMTP 认证

$mail->Username = $this->Username; // SMTP 用户名 即邮箱的用户名

$mail->Password = $this->Password; // SMTP 密码 部分邮箱是授权码(例如163邮箱)

$mail->SMTPSecure = $this->SMTPSecure; // 允许 TLS 或者ssl协议

$mail->Port = $this->Port; // 服务器端口 25 或者465 具体要看邮箱服务器支持

$mail->setFrom($this->From, $this->FromName); //发件人

$this->mail = $mail;

}

/**

* 发送邮件

* @param array $sendAddress 收件人地址数组, 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称

* @param array $Attachment 附件数组,如果为单值数组则为添加附件,如果为键值数组则添加附件并且重命名

* @param bool $isHtml 是否以html文档格式发送

* @param string $Subject 邮件主题

* @param string $Body 邮件内容,如果以html格式可以写入html

* @param string $AltBody 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称

* @param array $CC 抄送地址数组, 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称

* @param array $BCC 密送地址数组,如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称

* @return bool 是否发送成功

*/

public function sendEMail($sendAddress = [],$Subject = '', $Body = '', $AltBody = '', $Attachment = [] ,$isHtml = true,$CC = [], $BCC = []){

try {

//必填参数校验

if(empty($sendAddress) || empty($Subject) || empty($Body)){

return false;

}

//收件人

foreach ($sendAddress as $key => $value) {

if (is_int($key)) {

// 处理单值

$this->mail->addAddress($value);

} else {

// 处理键值

$this->mail->addAddress($value, $key);

}

}

//附件

if(!empty($Attachment)){

foreach ($Attachment as $key => $value) {

if (is_int($key)) {

// 处理单值

$this->mail->addAttachment($value);

} else {

// 处理键值

$this->mail->addAttachment($value, $key);

}

}

}

//抄送

if(!empty($CC)){

//抄送不为空

foreach ($CC as $key => $value) {

if (is_int($key)) {

// 处理单值

$this->mail->addCC($value);

} else {

// 处理键值

$this->mail->addCC($value, $key);

}

}

}

//密送

if(!empty($BCC)){

//密送不为空

foreach ($CC as $key => $value) {

if (is_int($key)) {

// 处理单值

$this->mail->addBCC($value);

} else {

// 处理键值

$this->mail->addBCC($value, $key);

}

}

}

//回复的时候回复给哪个邮箱 建议和发件人一致

$this->mail->addReplyTo($this->From, $this->FromName);

//Content

// 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容

$this->mail->isHTML($isHtml);

//邮件主题

$this->mail->Subject = $Subject;

//邮件内容

$this->mail->Body = $Body;

//如果邮件客户端不支持HTML则显示此内容

$this->mail->AltBody = $AltBody;

//发送

$this->mail->send();

return true;

} catch (\Exception $e) {

echo '邮件发送失败: ', $this->mail->ErrorInfo;

return false;

}

}

}

测试

不带附件

//不带附件

Route::any('test24', function (){

$mail = new Mail('makaloxx@163.com', 'EKYBQxxxANDPISHR');

$res = $mail->sendEMail(['makaloxxx@foxmail.com'], '测试邮件主题'. time(), '

这里是邮件内容

' . date('Y-m-d H:i:s'),'如果邮件客户端不支持HTML则显示此内容');

dump($res);

});

结果

197a01918491fc88d45cbe900bf6b378.png

带附件

//带附件

Route::any('test25', function (){

$mail = new Mail('makaloxxx@163.com', 'EKYBxxxPISHR');

$Attachment = [

//直接添加附件

Env::get("root_path") . "test.png",

//添加附件并重命名

'change_name.png' => Env::get("root_path") . "test.png"

];

$res = $mail->sendEMail(

['makalochen@foxmail.com'], '测试邮件主题'. time(),

'

这里是邮件内容

' . date('Y-m-d H:i:s'),

'如果邮件客户端不支持HTML则显示此内容',

$Attachment

);

dump($res);

});

效果

28269d49e16eff6e678c055b7e1ab6ef.png

标签:tp5.1,phpmailer,value,键值,key,邮箱,mail,电子邮件,邮件

来源: https://www.cnblogs.com/makalochen/p/14212133.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值