PHP 利用QQ郵箱發送郵件的實現

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP 利用QQ郵箱發送郵件的實現,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

在 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 核心檔案

↑ 在本文中只需要 class.phpmailer.php 和 PHPMailer/class.smtp.php。

QQ 郵箱設定

所有的主流郵箱都支援 SMTP 協議,但並非所有郵箱都預設開啟,您可以在郵箱的設定裡面手動開啟。

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

開啟 SMTP 服務

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

驗證密保

↑ 傳送簡訊“配置郵件用戶端”至1069-0700-69。

擷取授權碼

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

PHP發送郵件

基本代碼

下面的代碼示範了 PHPMailer 的使用方法,注意 PHPMailer 執行個體的配置過程。

// 引入PHPMailer的核心檔案require_once("PHPMailer/class.phpmailer.php");require_once("PHPMailer/class.smtp.php");// 執行個體化PHPMailer核心類$mail = new PHPMailer();// 是否啟用smtp的debug進行調試 開發環境建議開啟 生產環境注釋掉即可 預設關閉debug偵錯模式$mail->SMTPDebug = 1;// 使用smtp鑒權方式發送郵件$mail->isSMTP();// smtp需要鑒權 這個必須是true$mail->SMTPAuth = true;// 連結qq網域名稱郵箱的伺服器位址$mail->Host = 'smtp.qq.com';// 設定使用ssl加密方式登入鑒權$mail->SMTPSecure = 'ssl';// 設定ssl串連smtp伺服器的遠程伺服器連接埠號碼$mail->Port = 465;// 設定發送的郵件的編碼$mail->CharSet = 'UTF-8';// 設定寄件者暱稱 顯示在收件者郵件的寄件者郵箱地址前的寄件者姓名$mail->FromName = '寄件者暱稱';// smtp登入的帳號 QQ郵箱即可$mail->Username = '12345678@qq.com';// smtp登入的密碼 使用產生的授權碼$mail->Password = '**********';// 設定寄件者郵箱地址 同登入帳號$mail->From = '12345678@qq.com';// 郵件內文是否為html編碼 注意此處是一個方法$mail->isHTML(true);// 設定收件者郵箱地址$mail->addAddress('87654321@qq.com');// 添加多個收件者 則多次調用方法即可$mail->addAddress('87654321@163.com');// 添加該郵件的主題$mail->Subject = '郵件主題';// 添加郵件內文$mail->Body = '<h1>Hello World</h1>';// 為該郵件添加附件$mail->addAttachment('./example.pdf');// 發送郵件 返回狀態$status = $mail->send();

封裝方法

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

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

<?phprequire_once 'PHPMailer/class.phpmailer.php';require_once 'PHPMailer/class.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 = '123456789@qq.com'; // 授權登入的帳號    private static $PASSWORD = '****************'; // 授權登入的密碼    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->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(); // 發送郵件    }}

QQMailer.php

require_once 'QQMailer.php';// 執行個體化 QQMailer$mailer = new QQMailer(true);// 添加附件$mailer->addFile('20130VL.jpg');// 郵件標題$title = '願得一人心,白首不相離。';// 郵件內容$content = <<< EOF<p align="center">皚如山上雪,皎若雲間月。<br>聞君有兩意,故來相決絕。<br>今日鬥酒會,明旦溝水頭。<br>躞蹀禦溝上,溝水東西流。<br>淒淒複淒淒,嫁娶不須啼。<br>願得一人心,白首不相離。<br>竹竿何嫋嫋,魚尾何簁簁!<br>男兒重意氣,何用錢刀為!</p>EOF;// 發送QQ郵件$mailer->send('123456789@qq.com', $title, $content);

測試結果

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.