用PHPMailer例子安装和使用PHP依赖管理工具:Composer

前言:

本篇博客主要是给大家介绍Composer的安装和使用,并用加载PHPMailer代码库为例子给大家做演示。

环境:Centos7 + LAMP

由于例子中涉及到PHP发邮件,所以在开始本博客之前,建议大家先去阅读我的上一篇博客:《PHP中利用PHPMailer配合QQ邮箱实现发邮件》

一、准备工作:

现在我们在WWW目录下新建一个testMail目录,在testMail文件夹里新建index.php文件作为入口文件,新建function.php文件作为公共函数库文件。

二、Composer的安装和使用:

Composer是PHP的一个依赖管理工具,它允许你申明项目中所以来的代码库,它会在你的项目中为你安装他们。在这里,我们的PHPMailer将会作为一个代码库被引入到我们的小框架中,而这个工具就是Composer。

1、安装Composer:

安装 Composer,你只需要在项目根目录中下载 composer.phar 可执行文件。

cd /home/www/testMail
curl -sS https://getcomposer.org/installer | php

这里写图片描述

要检查 Composer 是否正常工作,只需要通过 php 来执行 PHAR:

php composer.phar

这将返回给你一个可执行的命令列表。

2、项目安装:composer.json

要开始在你的项目中使用 Composer,你只需要一个 composer.json 文件。该文件包含了项目的依赖和其它的一些元数据。

关于 require Key

第一件事情(并且往往只需要做这一件事),你需要在 composer.json 文件中指定 require key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。

json格式:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

你可以看到, require 需要一个包名称 (例如 monolog/monolog) 映射到 包版本 (例如 1.0.*) 的对象

我们在这里需要使用的是PHPMailer:

vim composer.json

#在composer.json文件中添加以下内容
{
    "require": {
        "phpmailer/phpmailer":"*"
    }
}

#保存退出

上面代码表示,我们要获取名为phpmailer供应商供应的名为phpmailer的项目,“*”表示任意版本(应该是获取最新版本)

3、安装依赖包

要获取定义的依赖到你的本地项目,只需要调用 composer.phar 运行 install 命令。

php composer.phar install

运行以上命令(这个过程会有点慢,稍等~~~):

这里写图片描述

运行完上面的命令后,我们会发现我们的testMail目录下增加了一些文件:

这里写图片描述

运行完以上代码后,这将会找到 phpmailer/phpmailer 的最新版本,并将它下载到 vendor 目录。 这是一个惯例把第三方的代码放到一个指定的目录 vendor。如果是 phpmailer 将会创建 vendor/phpmailer/phpmailer 目录。同时 install 命令将创建一个 composer.lock 文件到你项目的根目录中。

4、必要解析:composer.lock

在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定该项目的特定版本。

install 命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略 composer.json 文件中的定义)

如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。

这意味着如果你的依赖更新了新的版本,你将不会获得任何更新。此时要更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件

php composer.phar update

如果只想安装或更新一个依赖,你可以白名单它们。比如说你现在添加了很多的依赖,但是只想更新phpmailer:

php composer.phar update phpmailer/phpmailer

5、自动加载:使用 phpmailer 依赖包

自动加载:对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。

require 'vendor/autoload.php';

有了自动加载,我们就可以很容易的使用第三方代码。

好,现在我们在 index.php 文件中添加以下的代码:

#index.php文件

<?php
//添加公共函数库文件
require "function.php";

//添加自动加载支持
require "vendor/autoload.php";

?>

在 function.php 中添加 sendMail()函数(在上一篇博客中有个同学问我怎么实现群发,这里顺便实现了吧):

#function.php文件

<?php
/**
 * 发送邮件方法
 * @param $to :接收者数组 $title:标题 $content:邮件内容
 */
function sendMail(array $to,$title,$content){
    //配置(强烈建议写进配置文件,这里我仅是为了方便)
    $config = array(
        // 配置邮件发送服务器
        'MAIL_DEBUG'     =>  0,   // 是否启用smtp的debug进行调试
        'MAIL_HOST'      =>  'smtp.qq.com',   // SMTP服务器地址
        'MAIL_HOSTNAME'  =>  'http://lsgozj.cn',   // 设置发件人的主机域
        'MAIL_PORT'      =>  465,  //设置ssl连接smtp服务器的远程服务器端口号 可选465或587
        'MAIL_SMTPAUTH'  =>  TRUE, //启用smtp认证
        'MAIL_USERNAME'  =>  '123456789@qq.com',  // 用户名
        'MAIL_FROM'      =>  '123456789@qq.com',  // 邮箱地址
        'MAIL_FROMNAME'  =>  'LSGO实验室',  // 发件人姓名
        'MAIL_PASSWORD'  =>  'yacytiiryfzsbbif',  //smtp登录的密码 使用生成的授权码
        'MAIL_CHARSET'   =>  'UTF-8',   // 字符集
        'MAIL_ISHTML'    =>  TRUE, // 是否HTML格式邮件
        'MAIL_REPLYTO'   =>  '987654321@qq.com',   //用户回复邮件时的接收邮箱,可以与原始邮箱分开
        //抄送就是 你写的这封邮件除了传送给收件人,还会传送给你在抄送一栏里写的邮箱地址,并且收件人>知道你把这封邮件发给了他和抄送一栏里输入的邮件地址的人
        //密送就是 你写的这封邮件除了传送给收件人,还会传送给你在暗送一栏里写的邮箱地址,但是收件人>不知道你把这封邮件发给了暗送一栏里输入的邮件地址的人
        'MAIL_CC'        =>  '',    //抄送者
        'MAIL_BCC'       =>  '',    //密送着
    );

    //实例化PHPMailer核心类
    //这里由于 index.php 文件中已经 include "vendor/autoload.php",这里就不用引入了
    $mail = new PHPMailer;
    //使用smtp鉴权方式发送邮件
    $mail->isSMTP();
    //链接qq域名邮箱的服务器地址
    $mail->Host = $config['MAIL_HOST'];
    //smtp需要鉴权 这个必须是true
    $mail->SMTPAuth = $config['MAIL_SMTPAUTH'];
    //smtp登录的账号 这里填入字符串格式的qq号即可
    $mail->Username = $config['MAIL_USERNAME'];
    //smtp登录的密码 使用生成的授权码
    $mail->Password = $config['MAIL_PASSWORD'];
    //设置使用ssl加密方式登录鉴权
    $mail->SMTPSecure = 'ssl';
    //设置ssl连接smtp服务器的远程服务器端口号 可选465或587
    $mail->Port = $config['MAIL_PORT'];
    //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
    $mail->CharSet = $config['MAIL_CHARSET'];
    $mail->setFrom($config['MAIL_FROM'], $config['MAIL_FROMNAME']);
    //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不
同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
    //添加多个收件人 则多次调用方法即可
    // $mail->addAddress('xxx@163.com','晶晶在线用户');
    foreach($to as $val){
        $mail->addAddress($val);
    }

    //设置用户回复的邮箱
    $mail->addReplyTo($config['MAIL_REPLYTO']);
    //设置用户回复的邮箱
    $mail->addReplyTo($config['MAIL_REPLYTO']);

    //设置抄送人
    $mail->addCC($config['MAIL_CC']);
    //密送者,Mail Header不会显示密送者信息
    $mail->addBCC($config['MAIL_BCC']);

//    $mail->addAttachment('/var/tmp/file.tar.gz');         // 添加附件
//    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
    //邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
    $mail->isHTML($config['MAIL_ISHTML']);

    //添加该邮件的主题
    $mail->Subject = $title;
    //添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数>读取本地的html文件
    $mail->Body = $content;
    //添加邮件正文 上方将isHTML设置成了false时调用
    $mail->AltBody = strip_tags($content);

    if (!$mail->send()) {
        throw new \Exception('邮件发送失败!请检查相关配置!');
    }
}

?>

好了,现在我们就可以在 index.php 中使用 sendMail() 来发邮件了!

#index.php文件

//添加公共函数库文件
require "function.php";

//添加自动加载支持
require "vendor/autoload.php";

try{
    $users = array('11111111@qq.com','22222222@163.com');
    $title = '测试标题';
    $content = '测试邮箱内容!';
    sendMail($users,$title,$content);
}catch(Exception $e){
    var_dump($e->getMessage());
}

到此,我们的整篇博客就完了。如果大家发邮件失败了,第一是要检查配置!第二是去回顾我的上一篇博客 《PHP中利用PHPMailer配合QQ邮箱实现发邮件》,里面提到的注意事项。

关于composer的安装和使用的更详细的介绍,大家访问它的中文官方网站Composer 中文网

更多关于phpmailer包的详细信息请访问 phpmailer/phpmailer,我这里有相当一部分代码都是在上面拷贝的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值