前言:
本篇博客主要是给大家介绍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/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', // SMTP服务器地址
'MAIL_HOSTNAME' => 'http://lsgozj', // 设置发件人的主机域
'MAIL_PORT' => 465, //设置ssl连接smtp服务器的远程服务器端口号 可选465或587
'MAIL_SMTPAUTH' => TRUE, //启用smtp认证
'MAIL_USERNAME' => '123456789@qq', // 用户名
'MAIL_FROM' => '123456789@qq', // 邮箱地址
'MAIL_FROMNAME' => 'LSGO实验室', // 发件人姓名
'MAIL_PASSWORD' => 'yacytiiryfzsbbif', //smtp登录的密码 使用生成的授权码
'MAIL_CHARSET' => 'UTF-8', // 字符集
'MAIL_ISHTML' => TRUE, // 是否HTML格式邮件
'MAIL_REPLYTO' => '987654321@qq', //用户回复邮件时的接收邮箱,可以与原始邮箱分开
//抄送就是 你写的这封邮件除了传送给收件人,还会传送给你在抄送一栏里写的邮箱地址,并且收件人>知道你把这封邮件发给了他和抄送一栏里输入的邮件地址的人
//密送就是 你写的这封邮件除了传送给收件人,还会传送给你在暗送一栏里写的邮箱地址,但是收件人>不知道你把这封邮件发给了暗送一栏里输入的邮件地址的人
'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','晶晶在线用户');
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','22222222@163');
$title = '测试标题';
$content = '测试邮箱内容!';
sendMail($users,$title,$content);
}catch(Exception $e){
var_dump($e->getMessage());
}
到此,我们的整篇博客就完了。如果大家发邮件失败了,第一是要检查配置!第二是去回顾我的上一篇博客 《PHP中利用PHPMailer配合QQ邮箱实现发邮件》,里面提到的注意事项。
关于composer的安装和使用的更详细的介绍,大家访问它的中文官方网站Composer 中文网
更多关于phpmailer包的详细信息请访问 phpmailer/phpmailer,我这里有相当一部分代码都是在上面拷贝的。
更多推荐
用PHPMailer例子安装和使用PHP依赖管理工具:Composer
发布评论