Thinkphp5+PHPMailer實現發送郵件


PHP發送郵件需要開啟下面幾個服務:

SMTP:簡單郵件傳輸協議,用來發送郵件

POP3:簡單的郵件訪問協議,單向的,本地對郵件的操作不會同步到郵件服務器,用來接收郵件

IMAP:是一種比POP3更復雜的郵件訪問協議,是雙向的,本地對郵箱的操作會同步到郵箱服務器,用來接收郵件

發送之前需要擁有自己的郵件服務器,測試的時候其實用自己申請的免費郵箱就行,不需要自己搭建服務器了,可能要配置郵箱的SMTP服務,大部分公共郵箱(163、qq等)為了安全默認是關閉的,需要手動開啟。

網易郵箱配置

 

 QQ郵箱配置

 

基本的介紹完之后,開始說怎么用(以QQ郵箱為例)。

一、開啟服務 

登陸QQ郵箱,頂部有設置按鈕,點擊賬戶,拉到最后,開啟第一行的 POP3/SMTP 服務,開啟之后會有一串密碼,復制下來一會要用。

 

 

 

 二、下載安裝PHPMailer

1、從 github 上下載: https://github.com/PHPMailer/PHPMailer/

2、使用 composer 安裝:

composer require phpmailer/phpmailer

如果只是發送郵件,只留phpmailer.php和smtp.php就行。在vendor文件夾下新建phpmailer文件夾,把下載的文件放到這個文件夾下,打開composer.json文件,在autoload下加入一行代碼  phpmailer 是命名空間名,vendor/phpmailer是對應的文件名

"autoload": {
        "psr-4": {
            "app\\": "application",
            "phpmailer\\": "vendor/phpmailer"
        }
    },

分別打開PHPMailer.php和SMTP.php,修改其命名空間,為 “ namespace phpmailer; ”,兩個文件都要修改,要不然會找不到文件

 

 打開cmd,進入到項目根目錄,使用composer命令加載第三方類庫,執行composer dump-autoload

 

三、控制器代碼

<?php
namespace app\index\controller;
use think\Controller;
use phpmailer\PHPMailer;
use phpmailer\Exception;

class Sendmail extends Controller
{
    // 
    public function index()
    {    
        $toemail = '*****@126.com';    //這里寫的是收件人的郵箱
        $mail=new Phpmailer();
        $mail->isSMTP();    // 使用SMTP服務(發送郵件的服務)
        $mail->CharSet = "utf8";    // 編碼格式為utf8,不設置編碼的話,中文會出現亂碼
        $mail->Host = "smtp.qq.com";    // 發送方的SMTP服務器地址
        $mail->SMTPAuth = true;    // 是否使用身份驗證
        $mail->Username = "12*****186@qq.com";    // 申請了smtp服務的郵箱名(自己的郵箱名)
        $mail->Password = "hcstaffeplbcjgii";    // 發送方的郵箱密碼,不是登錄密碼,是qq的第三方授權登錄碼,要自己去開啟(之前叫你保存的那個密碼)
        $mail->SMTPSecure = "ssl";    // 使用ssl協議方式,
        $mail->Port = 465;    // QQ郵箱的ssl協議方式端口號是465/587
        $mail->setFrom("12*****186@qq.com","測試發件人");    // 設置發件人信息,如郵件格式說明中的發件人,
        $mail->addAddress($toemail,'測試收件人');    // 設置收件人信息,如郵件格式說明中的收件人
        $mail->addReplyTo("12*****186@qq.com","Reply");    // 設置回復人信息,指的是收件人收到郵件后,如果要回復,回復郵件將發送到的郵箱地址
        //$mail->addCC("xxx@163.com");    // 設置郵件抄送人,可以只寫地址,上述的設置也可以只寫地址(這個人也能收到郵件)
        //$mail->addBCC("xxx@163.com");    // 設置秘密抄送人(這個人也能收到郵件)
        //$mail->addAttachment("bug0.jpg");    // 添加附件
        $mail->Subject = "這是一個測試郵件";    // 郵件標題
        $mail->Body = '<h1>這里是郵件內容</h1>' . date('Y-m-d H:i:s');// 郵件正文
        //$mail->AltBody = "This is the plain text純文本";// 這個是設置純文本方式顯示的正文內容,如果不支持Html方式,就會用到這個,基本無用**
       if(!$mail->send()){    // 發送郵件
           echo "Message could not be sent.";
           echo "Mailer Error: ".$mail->ErrorInfo;    // 輸出錯誤信息
        }else{
            echo '';
            return '發送成功';
        }
    }

}

 

四、運行

sendmail.bat

@echo off
start http://網址/sendmail.php
exit

 

五、運行結果

發件人郵箱

 

 收件人郵箱

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM