PHPMailer使用 (郵箱發送)

本例是在TP5下進行:

使用phpmailer需要PHP開啓php_sockets和php_fileinfo

使用phpinfo()函數查看socket和openssl擴展信息(wamp server默認啓用了該擴展);

1.首先檢查php.ini中; extension = php_openssl.dll是否存在,如果存在的話去掉前面的註釋符';',如果不存在這行,那麼添加extension = php_openssl.dll;

2.打開的php.ini文件,需要做以下事情:

(1)啓用extension_dir =“ext”

(2)啓用擴展= p​​hp_sockets.dll

可以執行這樣一段代碼看是否開啓了插座(也可信息()查看):

<?php
if(extension_loaded('sockets')){
echo "已開啓";
}else{
echo "未開啓";
}
?>

3.下載phpmailer    https://sourceforge.net/projects/phpmailer/files/

將下載壓縮包中的這五個文件考出來

在自己項目中的供應商文件夾下創建一個PHPMailer的文件夾並將之前考的五個文件複製進去

打開供應商的文件下的composer.json文件添加這樣一行代碼

將PHPMailer的文件夾下的5個文件的命名空間修改爲

namespace ven \ PHPMailer;

設置將發件人開啓SMTP:

此地以QQ郵箱爲例:在郵件的設置 - >賬戶中開啓,跟着系統操作會生成一個授權碼,用於填寫在的common.php的文件中客戶端授權碼那個位置;

4.寫公共方法common.php,根據註釋修改成自己的配置項

/**
 * 發送郵件
 * @param $toemail 收件人email
 * @param $subject 郵件主題
 * @param $message 正文
 * @param $from 發件人
 * @param $cfg 郵件配置信息
 * @param $sitename 郵件站點名稱
 */
function send_email($toemail, $subject, $message, $from = '', $cfg = array(), $sitename = '')
{
    //判斷openssl是否開啓
    $openssl_funcs = get_extension_funcs('openssl');
    if (!$openssl_funcs) {
        return array('status' => -1, 'msg' => '請先開啓openssl擴展');
    }
    //表單提交 測試發送
    /*if ($cfg && is_array($cfg)) {
    $from = $cfg['from'];
    $email = $cfg;
    } else {
    $config = cache('Config');
 
    }*/
 
    // $config = cache('Config');
    $mail = new ven\PHPMailer\PHPMailer();
    //Server settings
    // var_dump($mail);die;
    $mail->CharSet = 'UTF-8'; //設定郵件編碼,默認ISO-8859-1,如果發中文此項必須設置,否則亂碼
    $mail->SMTPDebug = 0; // Enable verbose debug output
    $mail->isSMTP(); // Set mailer to use SMTP
    $mail->Host = 'smtp.qq.com'; // Specify main and backup SMTP servers
    $mail->SMTPAuth = true; // Enable SMTP authentication
    $mail->Username = '設置開啓了SMTP的郵箱號'; // SMTP username
    $mail->Password = 'SMTP的客戶端授權碼'; // SMTP password
    $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 25; //端口 - likely to be 25, 465 or 587
    //Recipients
    $mail->setFrom('發郵件的賬號(例如:[email protected])', '發郵件的賬戶名'); //發送方地址和暱稱
    $mail->addAddress($toemail, 'Joe User'); // Add a recipient
    //$mail->addReplyTo('[email protected]', 'Information'); //回覆地址
 
    //Content
    $mail->isHTML(true); // Set email format to HTML
    $mail->Subject = $subject; //標題
    $mail->Body = $message; //內容
    //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    if (!$mail->send()) {
        return array('status' => -1, 'msg' => '發送失敗: ' . $mail->ErrorInfo);
    } else {
        return array('status' => 1, 'msg' => '發送成功');
    }
 
}

5.打開命令行,cd到自己的項目目錄運行以下這串代碼會生成一個文件

composer dump-autoload

6.寫方法運行

<?php
namespace app\index\controller;


use think\Controller;
use Psr\Log\Logger;


class Index extends Controller
{
    public function index()
    {
        // send_email($toemail, $subject, $message, $from = '', $cfg = array(), $sitename = '')
        send_email('[email protected]', '大兄弟你趕緊滴兒', '<a href="http://www.baidu.com/">我跟你說啊,我等半個小時了都,扛不住啦我的天啦!!!</a>', $from = '發件人', $cfg = array(), $sitename = '站點名稱');
        echo "yes";
    }


}

運行指標下的指標控制器;發送郵件!

7.ok,成功發送郵件

 

補充:
 

$site =  $_SERVER['SERVER_NAME'];
        
        // if($r){
            $url_r = "<a href='http://".$site."/index.php/default/e_regist.html?email=".$data['email']."&code=".$code."'>http://".$site."/index.php/default/e_regist.html?email={$data['email']}&code={$code}</a>";
            $mail_to = $data['email'];
            $mail_subject = "註冊賬號";
            $mail_body = "
            <pre>
你正在執行找回密碼操作!
請點擊 {$url_r}鏈接完成激活。
如果您沒有在找回密碼,你可以安全地忽略本郵件。  
            </pre>";
            $res = Email::send_email($mail_to, $mail_subject, $mail_body, $from = '發件人', $cfg = array(), $sitename = '註冊賬號');

        $this->jssuccess('驗證信息已發送到你的郵箱,請驗證後登陸');

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章