標籤:debug pos 導致 主題 example mini 發送郵件 建議 output
1、Composer 安裝 phpmailer
composer require phpmailer/phpmailer
2、ThinkPHP 中封裝郵件服務類
我把它封裝在擴充目錄 extend/Mail.php 檔案裡,內容如下:
<?php/*** 郵件服務類*/class Mail extends \PHPMailer{function __construct(){date_default_timezone_set(‘PRC‘);$this->isSMTP();$this->SMTPDebug = config(‘mail.smtp_debug‘);$this->Debugoutput = config(‘mail.debug_output‘);$this->Host = config(‘mail.host‘);$this->Port = config(‘mail.port‘);$this->SMTPAuth = config(‘mail.smtp_auth‘);$this->SMTPSecure = config(‘mail.smtp_secure‘);$this->Username = config(‘mail.username‘);$this->Password = config(‘mail.password‘);$this->setFrom(config(‘mail.from‘), config(‘mail.from_name‘));$this->addReplyTo(config(‘mail.reply_to‘), config(‘mail.reply_to_name‘));}/** * 發送郵件 * @param [type] $toMail 收件者地址 * @param [type] $toName 收件者名稱 * @param [type] $subject 郵件主題 * @param [type] $content 郵件內容,支援html * @param [type] $attachment 附件列表。檔案路徑或路徑數組 * @return [type] 成功返回true,失敗返回錯誤訊息 */function sendMail($toMail, $toName, $subject, $content, $attachment = null){$this->addAddress($toMail, $toName);$this->Subject = $subject;$this->msgHTML($content);if($attachment) { // 添加附件if(!is_array($attachment)){is_file($attachment) && $this->AddAttachment($attachment);}else{foreach ($attachment as $file) { is_file($file) && $this->AddAttachment($file); } } }if(!$this->send()){ // 發送 return $this->ErrorInfo;}else{ return true;}}}
注意:如果發送附件,建議使用英文路徑。中文路徑可能會導致附件發送失敗,收到的郵件沒有附件。
上面需要的一些配置參數,我把它們放在擴充配置目錄 application/extra/mail.php 檔案裡 ,內容如下:
<?php/** * 郵件服務相關配置 */return [‘smtp_debug‘ => 0, // debug 模式。0: 關閉,1: 用戶端訊息,2: 用戶端和伺服器訊息,3: 2和串連狀態,4: 更詳細‘debug_output‘ => ‘html‘, // debug 輸出類型。‘host‘ => ‘smtp.126.com‘, // SMPT 伺服器位址‘port‘ => 465, // 連接埠號碼‘smtp_auth‘ => true, // 啟用SMTP認證‘smtp_secure‘ => ‘ssl‘, // 啟用安全性通訊協定‘username‘ => ‘[email protected]‘, // SMTP 使用者名稱‘password‘ => ‘yourpassword‘, // SMTP 密碼。126郵箱使用用戶端授權碼,QQ郵箱用獨立密碼‘from‘ => ‘[email protected]‘, // 寄件者郵箱‘from_name‘ => ‘name‘, // 寄件者名稱‘reply_to‘ => ‘‘, // 回複郵箱的地址。留空取寄件者郵箱‘reply_to_name‘ => ‘‘, // 名稱。留空取寄件者名稱];
注意:一般預設連接埠 25。如果使用了安全性通訊協定 ssl,那麼連接埠號碼一般是 465 或 587。譬如 126 郵箱。
更多配置參數,可以看看源碼:https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php
3、測試
在控制器裡方法裡,添加測試代碼:
public function mail(){ $mail = new \Mail; $ok = $mail->sendMail(‘[email protected]‘, ‘mingc‘, ‘郵件來了‘, ‘<p style="color: #f60; font-weight: 700;">恭喜,郵件成功!</p>‘, ‘C:/Users/Administrator/Desktop/body.bmp‘); var_dump($ok);}
這裡我使用 126 郵箱,安全性通訊協定 ssl,連接埠號碼 465,發送 html 內容,測試成功:
參考連結:
phpmail 的 STMP 郵件執行個體
ThinkPHP5 封裝郵件發送服務(可發附件)