用PHPMailer例子安裝和使用PHP依賴管理工具:Composer

來源:互聯網
上載者:User
前言:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.