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

来源:互联网 发布:大数据平台监控系统 编辑:程序博客网 时间:2024/05/16 14:57

前言:

本篇博客主要是给大家介绍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/testMailcurl -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 0