PHPMailer傳送郵件
使用PHP發郵件,需要PHPMailer類庫,今天記錄下使用PHPMailer的一些使用方法。
使用環境
0、版本不同,可能會導致解決方案行不通,故記錄使用環境。
1、Apache/2.4.33 (Win64) PHP/5.6.35
2、ThinkPHP5.0.21
3、phpmailer 6.0
安裝dompdf
1、使用命令列進入到專案根目錄
cd C:\wamp64\www\tp5
2、使用composer安裝phpmailer
composer require phpmailer/phpmailer
3、檢查是否安裝成功
在C:\wamp64\www\tp5\vendor看是否有phpmailer資料夾
使用方法一
//例項化PHPMailer
$this->mail = new \PHPMailer();
//是否啟用smtp的debug進行除錯,開發模式開啟
$mail->SMTPDebug = 1;
//使用smtp鑑權方式傳送郵件
$mail->isSMTP();
//使用鑑權方式,這裡必須是true
$mail->SMTPAuth = true;
//設定加密方式,這裡使用SSL
$mail->SMTPSecure = 'ssl';
//設定郵件伺服器地址,這裡使用QQ域名的郵箱伺服器
$mail- >Host = 'smtp.qq.com';
//設定郵箱伺服器埠
$mail->Port = 465;
//設定登入郵箱賬號,你的郵箱
$mail->Username = '#############';
//設定授權碼,從郵箱裡面設定SMTP獲得
$mail->Password = '##############';
//設定傳送郵件郵箱資訊,和登入郵箱賬號一致
$mail->setFrom('#########', '傳送人')
//設定接收郵件郵箱資訊,你要傳送的郵箱
$mail ->addAddress('##########');
//附件
$mail->addAttachment(ROOT_PATH.'/public/letters/test.pdf');
//郵件主題
$mail->Subject = '郵件主題';
//郵件內容
$mail->Body = '郵件內容';
使用方法二
使用於tls方式、25埠,大致引數一樣,需要改變幾個關鍵的地方。
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
));
$mail->SMTPSecure = 'tls';
$mail->Port = 25;
關於除錯
開啟除錯
$mail->SMTPDebug = 1;
有時除錯只能看到比較大概的錯誤,要想看到詳細的錯誤就需要設定除錯等級,先來看原始碼註釋內容
/**
* Debug output level.
* Options:
* * self::DEBUG_OFF (`0`) No debug output, default
* * self::DEBUG_CLIENT (`1`) Client commands
* * self::DEBUG_SERVER (`2`) Client commands and server responses
* * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
* * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
* @var integer
*/
可以大致看出每個等級顯示資訊內容:
0 => 預設不開啟除錯輸出
1 => 客戶端命令
2 => 客戶端命令和伺服器反饋
3 => 附加一些連線狀態
4 => 底層資料輸出,所有資訊
由此可見,如果還沒有找到想要的資訊,不妨設定到3 和 4看看。有具體的錯誤資訊,才能更快的解決問題。
相關擴充套件
使用這個類庫需要開啟openssl,sockets,一般都預設開啟了。沒有開啟的,找到php.ini去掉以下兩行前面的分號,開啟擴充套件。
extension=php_openssl.dll
extension=php_sockets.dll
訪問phpinfo(),檢查他們是否開啟。
結語
1、整體上這個類庫坑不是很多,可能就是使用tls、25埠的時候有些坑。
2、使用$mail->SMTPDebug除錯非常重要
3、使用QQ郵箱伺服器傳送郵件,需要先去自己的郵箱設定STMP,並獲取授權碼。