一、 Composer 安装 phpmailer

composer require phpmailer/phpmailer

二、ThinkPHP 中封装邮件服务类

我把它封装在扩展目录 extend/Mail.php 文件里,内容如下:

<?php
/**
* 邮件服务类
*/
class Mail extends \PHPMailer
{
function __construct()
{
date_default_timezone_set('PRC'); // 默认时区设置 $this->CharSet = config('mail.charset'); // 邮件编码设置
$this->isSMTP(); // 启用SMTP服务
$this->SMTPDebug = config('mail.smtp_debug'); // Debug模式级别
$this->Debugoutput = config('mail.debug_output'); // Debug输出类型
$this->Host = config('mail.host'); // SMTP服务器地址
$this->Port = config('mail.port'); // 端口号
$this->SMTPAuth = config('mail.smtp_auth'); // SMTP登录认证
$this->SMTPSecure = config('mail.smtp_secure'); // SMTP安全协议
$this->Username = config('mail.username'); // SMTP登录邮箱
$this->Password = config('mail.password'); // SMTP登录密码
$this->setFrom(config('mail.from'), config('mail.from_name')); // 发件人邮箱和名称
$this->addReplyTo(config('mail.reply_to'), config('mail.reply_to_name')); // 回复邮箱和名称
} /**
* 发送邮件
* @param [type] $toMail 收件人地址
* @param [type] $toName 收件人名称
* @param [type] $subject 邮件主题
* @param [type] $content 邮件内容,支持html
* @param [type] $attachment 附件列表。文件路径或路径数组
* @return [type] 成功返回true,失败返回错误消息
*/
function sendMail($toMail, $toName, $subject, $content, $attachment = null)
{
$this->addAddress($toMail, $toName);
$this->Subject = $subject;
$this->msgHTML($content); if($attachment) { // 添加附件
if(is_string($attachment)){
is_file($attachment) && $this->AddAttachment($attachment);
}
else if(is_array($attachment)){
foreach ($attachment as $file) {
is_file($file) && $this->AddAttachment($file);
}
}
} if(!$this->send()){ // 发送
return $this->ErrorInfo;
}
else{
return true;
}
}
}

  

注意:如果发送附件,建议使用英文路径。中文路径可能会导致附件发送失败,收到的邮件没有附件。

上面需要的一些配置参数,我把它们放在扩展配置目录 application/extra/mail.php 文件里 ,内容如下:

<?php
/**
* 邮件服务相关配置
*/
return [
'charset' => 'utf-8', // 邮件编码
'smtp_debug' => 0, // Debug模式。0: 关闭,1: 客户端消息,2: 客户端和服务器消息,3: 2和连接状态,4: 更详细
'debug_output' => 'html', // Debug输出类型。`echo`(默认),`html`,或`error_log`
'host' => 'smtp.126.com', // SMTP服务器地址
'port' => 465, // 端口号。默认25
'smtp_auth' => true, // 启用SMTP认证
'smtp_secure' => 'ssl', // 启用安全协议。''(默认),'ssl'或'tls',留空不启用
'username' => 'yourname@example.com', // SMTP登录邮箱
'password' => 'yourpassword', // SMTP登录密码。126邮箱使用客户端授权码,QQ邮箱用独立密码
'from' => 'from@example.com', // 发件人邮箱
'from_name' => 'name', // 发件人名称
'reply_to' => '', // 回复邮箱的地址。留空取发件人邮箱
'reply_to_name' => '', // 回复邮箱人名称。留空取发件人名称
];

  

注意:一般默认端口 25。如果使用了安全协议 ssl,那么端口号一般是 465 或 587。譬如 126 邮箱。建议使用安全协议,因为像阿里云服务器就禁止了非安全协议的 25 端口。

更多配置参数,可以看看源码:https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php

三、测试

在控制器里方法里,添加测试代码:

public function mail()
{
$mail = new \Mail;
$ok = $mail->sendMail('xxxxxxxxx@qq.com', 'mingc', '邮件来了', '<p style="color: #f60; font-weight: 700;">恭喜,邮件成功!</p>', 'C:/Users/Administrator/Desktop/body.bmp');
var_dump($ok);
}

  

这里我使用 126 邮箱,安全协议 ssl,端口号 465,发送 html 内容,测试成功:

参考链接:phpmail 的 SMTP 邮件实例

ThinkPHP5 封装邮件发送服务(可带附件)的更多相关文章

  1. ThinkPHP5 封装邮件发送服务(可发附件)

    1.Composer 安装 phpmailer 1 composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend ...

  2. 邮件发送服务AWS SES,Mailgun以及SendCloud(转)

    原文:http://www.l4zy.com/posts/aws_ses-mailgun-sendcloud.html 电子邮件这一已经诞生很多年的互联网基础服务并没有随着时间的推移而慢慢消亡,实际上 ...

  3. 【故障公告】SendCloud 邮件发送服务故障造成大量 QQ 邮箱收不到邮件

    抱歉,由于我们所使用的搜狐旗下的 SendCloud 邮件发送服务出现故障,今天上午大量发往 @qq.com 邮箱的邮件无法正常发送,从 SendCloud 管理控制台看这些邮件一直处于“请求中”的状 ...

  4. c#邮件发送服务

    邮件发送服务 项目中会遇到定时给某人发送邮件的功能要求,这里是京东的一段代码,当然也是我同事找的,我记录学习一下,以免忘记. 这是解决方案 这里主要是工具:日志工具,链接数据库工具,发送邮件工具 这里 ...

  5. 免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持

    一般来说网站注册.论坛消息.新闻推送.广告宣传等都会有发送邮件服务,大量的邮件发送服务如果用PHP来发送,一是会消耗主机资源,二是容易被各大邮箱判定为垃圾邮件而被拒收.用第三方的邮局服务发送邮件,可以 ...

  6. SpringBoot系列(十四)集成邮件发送服务及邮件发送的几种方式

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  7. Flask—04-文件上传与邮件发送(自带优化)

    文件上传与邮件发送 可以按照标题分别直接粘贴对应的文件夹,运行直接用: 原生上传 模板文件 <form method="post" enctype="multipa ...

  8. python+selenium实现发送一封带附件的邮件

    163邮件登录首页 登录成功断言是否有退出按钮 点击退出退出登录 from selenium import webdriver import unittest import time class Vi ...

  9. 纯java实现邮件发送服务(亲测好用)

    今天自己测试了一下用java代码实现发送有限的服务,非常简单.直接贴代码: import com.sun.mail.util.MailSSLSocketFactory; import javax.ma ...

随机推荐

  1. 关于MultipleActiveResultSets属性导致的There is already an open DataReader associated with this Command which must be closed first的解决方法

    执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者Update操作的话,会得到一个错误提示:There is already an open Dat ...

  2. 集群之mysql主从配置(windows和linux版)

    起因 由于网站进一步开发运行的需求,要求主机7*24小时运行正常,同时要求能够防止数据库灾难.考虑到后期的开发程度和业务量,准备向高可用系统进行改变,同时通过负载均衡提高网络性能.于是第一步就考虑到了 ...

  3. vue 自定义组件

    1.Vue.component('component-test', { props:{}, data:function(){ return{} }, mounted:function(){}, com ...

  4. 认识cpu、核与线程

    作为一个后台开发人员,我想有必要了解这些基础知识.如果本文有不严谨或者疏忽的地方,请指正. cpu与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的4核 ...

  5. 关于PHP魔术方法__call的一点小发现

    好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...

  6. LuaFramework热更新过程(及可更新的loading界面实现)

          1.名词解释: 资源包:点击 LuaFramework  |  Build XXX(平台名) Resource,框架会自动将自定义指定的资源打包到StreamingAssets文件夹,这个 ...

  7. JSON风格指南

    中文版:https://github.com/darcyliu/google-styleguide/blob/master/JSONStyleGuide.md 英文版:https://google.g ...

  8. HTML细节

    link   设置body中超链接默认颜色 : alink  设置body中超链接点击时候的颜色: vlink  设置body中超链接访问过后的颜色 字体的大小  size       大小 取值范围 ...

  9. iOS源码博文集锦2

    iOS精选源码 快速集成观看直播和开播   一款类携程商旅的城市选择界面   一个类似于QQ电话的动画效果   高德地图定位,导航,轨迹,GPS纠偏   真实逻辑滚动数字DPScrollNumberL ...

  10. selenium+python开发环境的搭建

    web 调试工具介绍和开发环境搭建 python与selenium开发环境搭建: 一.下载python软件:https://www.python.org/ 下载完后,进行安装,安装成功后,打开IDLE ...