php引入PHPMailer發送郵件

昨天作了一個發送郵件的功能,若是直接用mail()函數,須要擁有本身的郵件服務器,全部引入PHPMailer類方便快捷,簡單寫一下開發步驟:php

1、擁有本身的郵箱帳號(做爲發件人郵箱)html

  分兩種狀況:git

  一、若是是企業郵箱,須要用到的參數爲郵箱號和密碼github

  二、若是是我的郵箱,須要用到的參數爲郵箱號和受權碼(只有開啓以後才能經過PHP代碼,控制郵件的自動發送)thinkphp

 

2、PHPMailer的下載服務器

  下載地址:https://github.com/PHPMailer/PHPMailer網絡

  我這裏是用的thinkphp 5,下載後放到vendor目錄app

3、封裝發送郵件方法,設置相關參數函數

 具體代碼以下,這裏我用的是企業郵箱,若是是我的郵箱,需更改如下幾個參數值:ui

$mail->Host,$mail->Port,發件人郵箱密碼(受權碼)

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/10/15 0015
 * Time: 13:33
 */

namespace app\common\model;

require VENDOR_PATH . 'PHPMailer/src/Exception.php';
require VENDOR_PATH . 'PHPMailer/src/PHPMailer.php';
require VENDOR_PATH . 'PHPMailer/src/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception ;
class Mail
{
    //發件人郵箱
    private static $_fromAddress = '***@medpeer.cn';
    //發件人郵箱登陸密碼(非企業郵箱爲受權碼)
    private static $_pwd = '***';
    //收件人郵箱
    private static $_toAddress = '***@medpeer.cn';

    /**
     * 發送郵件
     * @author ZZ
     * @param string $fromAddress 發件人
     * @param string $pwd 發件人登陸密碼
     * @param string $toAddress 收件人
     * @param string $title 郵件題目
     * @param string $content 郵件內容
     * @return array
     */
    public function sendMail($title,$content,$toAddress = '',$fromAddress = '',$pwd = ''){
        if (empty($title) || empty($content)) {
            return ['result' => false, 'msg' => '參數錯誤'];
        }
        if (empty($fromAddress)) {
            $fromAddress = self::$_fromAddress;
            $pwd = self::$_pwd;
        }
        if (empty($toAddress)) {
            $toAddress = self::$_toAddress;
        }
        $mail = new PHPMailer();
        //告訴PHPMailer使用SMTP
        $mail->isSMTP();
        //啓用S​​MTP調試
        // 0 =關閉(供生產使用)
        // 1 =客戶端消息
        // 2 =客戶端和服務器消息
        $mail->SMTPDebug = 2 ;
        //設置郵件服務器的主機名
        $mail->Host = 'smtp.exmail.qq.com';
        //使用
        // $ mail-> Host = gethostbyname('smtp.gmail.com');
        //若是您的網絡不支持SMTP over IPv6
        //設置SMTP端口號 -  587用於通過身份驗證的TLS,即RFC4409 SMTP提交
        $mail->Port = 465;
        //設置加密系統使用 -  ssl(不建議使用)或tls
        $mail->SMTPSecure = 'ssl';
        //是否使用SMTP身份驗證
        $mail->SMTPAuth = true ;
        //用於SMTP身份驗證的用戶名 - 使用gmail的完整電子郵件地址
        $mail->Username = $fromAddress;
        //用於SMTP身份驗證的密碼(企業郵箱的話爲登陸密碼)
        $mail->Password = $pwd;
        //設置發送的郵件的編碼 可選GB2312 我喜歡utf-8 聽說utf8在某些客戶端收信下會亂碼
        $mail->CharSet = 'UTF-8';
        //設置要從中發送消息的人員
        $mail->setFrom($fromAddress,'***');
        //設置備用回覆地址
        //$mail->addReplyTo('***@qq.com','騰訊');
        //設置要將消息發送給誰
        $mail->addAddress($toAddress,'***');
        //設置主題行
        $mail->Subject = $title;
        //從外部文件中讀取HTML郵件正文,將引用的圖像轉換爲嵌入式圖像
        //將HTML轉換爲基本的純文本替代正文
        //$mail->msgHTML(file_get_contents(' contents.html '),__DIR__);
        //用手動建立的純文本正文替換
        $mail->AltBody  = 'This is the body in plain text for non-HTML mail clients';
        $mail->Body  = $content;
        $result = $mail->send();
        if (!$result) {
            return ['result' => false, 'msg' => $mail->ErrorInfo];
        } else {
            return ['result' => true, 'msg' => '成功發送郵件消息'] ;
        }
    }
}
相關文章
相關標籤/搜索