ThinkPHP5 封裝郵件發送服務(可發附件)

來源:互聯網
上載者:User

標籤: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 封裝郵件發送服務(可發附件)

相關文章

聯繫我們

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