昨天作了一個發送郵件的功能,若是直接用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(); //啓用SMTP調試 // 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' => '成功發送郵件消息'] ; } } }