1. 程式人生 > >PHP使用phpMailer發送郵件

PHP使用phpMailer發送郵件

添加 stat 附件 支持 require self title 郵件標題 word

在 PHP 應用開發中,往往需要驗證用戶郵箱、發送消息通知,而使用 PHP 內置的 mail() 函數,則需要郵件系統的支持。

如果熟悉 IMAP/SMTP 協議,結合 Socket 功能就可以編寫郵件發送程序了,不過開發這樣一個程序並不容易。

好在 PHPMailer 封裝的足夠強大,使用它可以更加便捷的發送郵件,免去了我們很多額外的麻煩。

PHPMailer

PHPMailer 是一個封裝好的 PHP 郵件發送類,支持發送 HTML 內容的電子郵件,以及可以添加附件發送,並不像 PHP 本身 mail() 函數需要服務器環境支持,您只需要設置郵件服務器以相關信息就能實現郵件發送功能。

PHPMailer 項目地址:https://github.com/PHPMailer/PHPMailer

PHP擴展支持

PHPMailer 需要 PHP 的 sockets 擴展支持,而登錄 QQ 郵箱 SMTP 服務器則必須通過 SSL 加密,故 PHP 還得包含 openssl 的支持。

技術分享圖片

註:使用 phpinfo() 函數查看 socket 和 openssl 擴展信息(wamp server 默認啟用了該擴展)。

PHPMailer 核心文件

技術分享圖片

技術分享圖片

註:這裏只需要用到PHPMailer.php和SMTP.php文件

QQ 郵箱設置

所有的主流郵箱都支持 SMTP 協議,但並非所有郵箱都默認開啟,您可以在郵箱的設置裏面手動開啟。

第三方服務在提供了賬號和密碼之後就可以登錄 SMTP 服務器,通過它來控制郵件的中轉方式。

開啟 SMTP 服務

技術分享圖片

註:選擇 IMAP/SMTP 服務,點擊開啟服務。

驗證密保

技術分享圖片

發送短信“配置郵件客戶端”至1069-0700-69。

獲取授權碼

技術分享圖片

SMTP 服務器認證密碼,需要妥善保管(PS:密碼直接沒有空格)。

PHP發送郵件

封裝方法

如果要直接使用 PHPMailer 發送郵件,則需要進行繁瑣的配置,這樣做多少會降低效率。

為了簡化調用過程,我在其基礎上進行了二次封裝,只需要配置賬號、密碼和昵稱,就可以定制你自己的 QQMailer 類了。

<?php

require_once ‘./src/PHPMailer.php‘;
require_once ‘./src/SMTP.php‘;

class QQMailer
{
public static $HOST = ‘smtp.qq.com‘; // QQ 郵箱的服務器地址
public static $PORT = 465; // smtp 服務器的遠程服務器端口號
public static $SMTP = ‘ssl‘; // 使用 ssl 加密方式登錄
public static $CHARSET = ‘UTF-8‘; // 設置發送的郵件的編碼

private static $USERNAME = ‘[email protected]‘; // 授權登錄的賬號
// private static $PASSWORD = ‘hddddpbqtaccbddd‘; // 授權登錄的密碼
private static $PASSWORD = ‘oiwhwlirlcxvbede‘; // 授權登錄的密碼
private static $NICKNAME = ‘woider‘; // 發件人的昵稱

/**
* QQMailer constructor.
* @param bool $debug [調試模式]
*/
public function __construct($debug = false)
{
$this->mailer = new PHPMailer();
// $this->mailer->SMTPDebug = $debug ? 1 : 0;
$this->mailer->SMTPDebug = 0;
$this->mailer->isSMTP(); // 使用 SMTP 方式發送郵件
}

/**
* @return PHPMailer
*/
public function getMailer()
{
return $this->mailer;
}

private function loadConfig()
{
/* Server Settings */
$this->mailer->SMTPAuth = true; // 開啟 SMTP 認證
$this->mailer->Host = self::$HOST; // SMTP 服務器地址
$this->mailer->Port = self::$PORT; // 遠程服務器端口號
$this->mailer->SMTPSecure = self::$SMTP; // 登錄認證方式
/* Account Settings */
$this->mailer->Username = self::$USERNAME; // SMTP 登錄賬號
$this->mailer->Password = self::$PASSWORD; // SMTP 登錄密碼
$this->mailer->From = self::$USERNAME; // 發件人郵箱地址
$this->mailer->FromName = self::$NICKNAME; // 發件人昵稱(任意內容)
/* Content Setting */
$this->mailer->isHTML(true); // 郵件正文是否為 HTML
$this->mailer->CharSet = self::$CHARSET; // 發送的郵件的編碼
}

/**
* Add attachment
* @param $path [附件路徑]
*/
public function addFile($path)
{
$this->mailer->addAttachment($path);
}


/**
* Send Email
* @param $email [收件人]
* @param $title [主題]
* @param $content [正文]
* @return bool [發送狀態]
*/
public function send($email, $title, $content)
{
$this->loadConfig();
$this->mailer->addAddress($email); // 收件人郵箱
$this->mailer->Subject = $title; // 郵件主題
$this->mailer->Body = $content; // 郵件信息
return (bool)$this->mailer->send(); // 發送郵件
}
}

調用方法

<?php
require_once ‘QQMailer.php‘;

// 實例化 QQMailer
$mailer = new QQMailer(true);
// 添加附件
// $mailer->addFile(‘20130VL.jpg‘);
// 郵件標題
$title = ‘這是標題。‘;
// 郵件內容
$content = <<< EOF
<p align="center">
這是內容。<br>
EOF;
// 發送QQ郵件
$res = $mailer->send(‘[email protected]‘, $title, $content);


if($res){
echo "發送成功!";
}

//想要屏蔽運行詳情,就將// $this->mailer->SMTPDebug = $debug ? 1 : 0;值改為0即可

PHP使用phpMailer發送郵件