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

1、Composer 安装 phpmailer

1
composer require phpmailer/phpmailer

 

2、ThinkPHP 中封装邮件服务类

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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 文件里 ,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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',              // SMPT服务器地址
    '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

 

3、测试

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

1
2
3
4
5
6
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 的 STMP 邮件实例

转载于:https://www.cnblogs.com/shenzikun1314/p/7467198.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中如何定义常量和变量的区别,php define常量定义与变量区别

常量在使用前必须要定义&#xff0c;否则程序执行会出错。在php中使用define()函数来定义常量。1、语法格式&#xff1a;define("常量名称","常量的值");例如&#xff1a;define("php360","完美的php");下面还是来一个范例吧&#xff…

PHP小语种网站开发,当阳小语种建站

当阳小语种建站&#xff0c;六脉(LIUMAI)&#xff0c;专注于帮助中小企业开拓海外市场获取外贸订单&#xff0c;提供外贸整体解决方案。当阳小语种建站&#xff0c; 拥有强大的搜索引擎优化功能&#xff0c;通过操作全球贸易通后台可以轻松实现对英语及小语种网站的搜索优化&am…

密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

密码学笔记——eval(function(p,a,c,k,e,d) 的加密破解 例题&#xff1a; 小明某天在看js的时候&#xff0c;突然看到了这么一段代码&#xff0c;发现怎么也理不出代码逻辑&#xff0c;你能帮帮他吗&#xff1f; 格式&#xff1a;SimCTF{} eval(function(p,a,c,k,e,d){efunctio…

Spring Boot Cassandra的第一步

如果您想通过Spring Boot开始使用Cassandra NoSQL数据库&#xff0c;最好的资源可能是此处提供的Cassandra示例和Spring数据Cassandra文档 。 在这里&#xff0c;我将采取一些绕过的方式&#xff0c;实际是在本地安装Cassandra并对其进行基本测试&#xff0c;我的目标是在下一…

php提交表单显示错误,php – 在提交注册表单时使用jQuery显示错误

你需要修好几件事情。>首先&#xff0c;处理注册过程的文件不应该是与表单相同的文件。>它纯粹用于处理数据&#xff0c;因此不能使用头(“Location&#xff1a;login.php”)直接重定向浏览器。这部分应该由你的JavaScript代码来处理。>您还需要告诉浏览器&#xff0c…

Selenium-键盘操作

在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合操作如CtrlA全选),CtrlC(复制),CtrlV(粘贴).更多参考官方文档对应的编码http://selenium-python.readthedocs.org/api.html from selenium.webdriver.common.keys import keys send_kyes(Keys.ENTER) …

Python学习笔记----try...except...else

Python 中的异常处理&#xff1a; 一、try...except...else 程序运行过程中会出现类似以下错误&#xff1a; 1 a10 2 b0 3 ca/b 4 print(c) 运行结果为&#xff1a; Traceback (most recent call last): File "D:/Study/s14/day4/临时.py", line 13, in <module&g…

matlab_ga(),matlab遗传算法ga函数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function optimization4()A[];b[];Aeq[];beq[];LB[0.1;0.03;0.03;0.1;0.03;0.03];UB[0.4;0.06;0.06;0.4;0.06;0.06];nvars6;optionsgaoptimset(TimeLimit,inf,PlotFcns,{gaplotbestf},PopulationSize,10,Generations,15,PopInitRan…

Windows负载机JVM 远程监控Linux服务器下tomcat

基本是跟着网上的操作进行的&#xff0c;除了遇到一个Local host name unknown的问题&#xff1a; 一、Linux服务器操作部分 服务器地址&#xff1a;10.64.111.68 首先配置JMX&#xff1a; 1.找到jdk目录 [rootC68 demo]# echo $JAVA_HOME /root/demo/jdk1.8.0_60 2. cd 到/roo…

idea struts插件_使用Struts 2的查询网格(无插件)

idea struts插件当将jQuery与struts 2结合使用时&#xff0c;开发人员被说服使用struts2-jQuery插件 。 因为大多数论坛和其他Internet资源都支持jQuery struts2 jQuery插件。我有这种经验。 我想使用带有struts 2的jQuery网格插件&#xff0c;但不使用struts2 jQuery插件。 对…

matlab 值法确定各指标权重,Matlab学习系列19. 熵值法确定权重

19. 熵值法确定权重一、基本原理在信息论中&#xff0c;熵是对不确定性的一种度量。信息量越大&#xff0c;不确定性就越小&#xff0c;熵也就越小&#xff1b;信息量越小&#xff0c;不确定性越大&#xff0c;熵也越大。 根据熵的特性&#xff0c;可以通过计算熵值来判断一个事…

在Sqoop中管理密码的关键提示

Sqoop是用于Hadoop的流行数据传输工具。 Sqoop允许从结构化数据存储&#xff08;如关系数据库&#xff0c;企业数据仓库和NoSQL数据存储&#xff09;轻松导入和导出数据。 Sqoop还与Hive&#xff0c;HBase和Oozie等基于Hadoop的系统集成。 在此博客文章中&#xff0c;我将介绍…

php 商城套餐搭配功能,速卖通商品搭配套餐功能已上线!设置速卖通搭配套餐仅需三步...

据雨果网获悉&#xff0c;速卖通商品搭配套餐功能已于 10 月 19 日上线。商品搭配套餐的主要功能及作用&#xff0c;主要是帮助速卖通的卖家&#xff0c;通过自行选择商品&#xff0c;设置不同商品间搭配优惠促销价格&#xff0c;提高商品推广内容的丰富性及专业性&#xff0c;…

二维码支付原理分析及安全性的探究

“二维码支付”安全么&#xff1f; 1 引言 随时支付宝和微信的线下不断推广&#xff0c;目前使用手机进行二维码支付已经逐渐成为一种时尚了。 但是大家有没有思考过&#xff1a;这种便捷的支付方式到底安不安全呢&#xff1f;今天我们就针对这个话题来进行一些探讨吧。 2 …

python创建一个包,如何从python包创建一个osx应用程序/ dmg?

我不知道正确的方法&#xff0c;但是这种手动方法是我用于简单脚本的方法&#xff0c;似乎已经适当地执行了。我会假设我所在的任何目录&#xff0c;我的程序的Python文件都在相对的src /目录中&#xff0c;我要执行的文件(具有正确的shebang和执行权限)被命名为main.py。$ mkd…

自定义类加载器

转载自&#xff1a;http://www.cnblogs.com/xrq730/p/4847337.html 为什么要自定义类加载器转载于:https://www.cnblogs.com/IvySue/p/7490656.html

guice spring_Spring vs Guice:重要的一个关键区别

guice spring根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系&#xff0c;Spring范围大致类似于Map <String&#xff0c;Object>结构。 这意味着您不能有两个名称相同的对象 。 为什么这是一件坏事&#xff1f; 如果您的大型应用程序具有许多Configuratio…

query row php,php – 如何在Codeigniter上使用$query- row获取类对象

我目前正在使用Codeigniter框架.在下面的代码中,我想获得一个Animal_model对象,而不是stdClass对象.class Animal_model extends CI_Model{var $idanimal;var $name;public static $table animals;function __construct() {parent::__construct();}function getone(self $anim…

vue2.0版本指令v-if与v-show的区别

v-if&#xff1a; 判断是否加载&#xff0c;可以减轻服务器的压力&#xff0c;在需要时加载。 v-show&#xff1a;调整css dispaly属性&#xff0c;可以使客户端操作更加流畅。 v-if示例&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF…

oracle 中增加行,Oracle中实现FORM表单插入、锁定、更新行、删除行的包

此包写在oracle数据库中&#xff0c;供Form表单调用&#xff1a;CREATE OR REPLACE PACKAGE BODY cux_main_pkg AS/*** PROCEDURE: insert_row()***/PROCEDURE insert_row(x_row_id IN OUT VARCHAR2,x_insp_header_id IN OUT NUMBER,p_org_id IN…