前言:
本篇部落客要是給大家介紹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,我這裡有相當一部分代碼都是在上面拷貝的。