Laravel發送郵件

Laravel使用功能豐富免費的“SwiftMailer”程式庫來發送電子郵件。 使用這個庫函數,我們可以輕鬆地發送電子郵件。電子郵件範本以視圖同樣的方式加載,這意味著可以使用 Blade 語法並數據注入到你的範本。以下是發送函數的語法。
語法 void send(string|array $view, array $data, Closure|string $callback)
參數
  • $view(string|array) – 包含電子郵件的視圖的名稱

  • $data(array) – 數組數據用來傳遞到視圖

  • $callback – 接收郵件的實例,可自定義收件人,主題和郵件等方面的閉合回調

返回值 nothing
描述 發送郵件
在第三個參數, $callback封閉收到消息實例以及與實例,我們還可以調用下麵函數並更改資訊,如下圖所示。
  • $message->subject('Welcome to the zaixian zaixian');
  • $message->from('email@example.com', 'Mr. Example');
  • $message->to('email@example.com', 'Mr. Example');
一些不太常用的方法包括 -
  • $message->sender('email@example.com', 'Mr. Example');
  • $message->returnPath('email@example.com');
  • $message->cc('email@example.com', 'Mr. Example');
  • $message->bcc('email@example.com', 'Mr. Example');
  • $message->replyTo('email@example.com', 'Mr. Example');
  • $message->priority(2);
要附加或嵌入檔,可以使用以下方法 -
  • $message->attach('path/to/attachment.txt');
  • $message->embed('path/to/attachment.jpg');

郵件可以發送HTML或文本。您可以通過傳遞一個數組指明發送郵件的類型,如下圖所示的第一個參數。默認類型為HTML。如果您想發送純文本郵件,然後使用以下語法。

語法

Mail::send([‘text’=>’text.view’], $data, $callback);
在此語法中,第一個參數需要一個數組。使用“text”為鍵,這個鍵對應的值是“name of the view”。 

示例

第1步 - 現在要從Gmail帳戶發送電子郵件,那麼這裏需要配置Laravel環境檔中的Gmail帳戶 — .env 檔。Gmail帳戶啟用兩步驗證,創建一個應用程式並指定密碼,如下圖所示修改 .env 中的參數。

.env

MAIL_DRIVER = smtp
MAIL_HOST = smtp.qq.com
MAIL_PORT = 587
MAIL_USERNAME = QQ郵箱地址,如:2211@qq.com
MAIL_PASSWORD = QQ密碼
MAIL_ENCRYPTION = tls
第2步 - 修改 .env 檔執行下麵的兩個命令來清除緩存,並重新啟動Laravel伺服器之後。
php artisan config:cache
第3步 - 通過執行以下命令來創建一個名為 MailController 的控制器。
php artisan make:controller MailController
第4步 - 成功執行後,您會收到以下輸出 -

第5步 - 複製下麵的代碼到 app/Http/Controllers/MailController.php 檔,具體代碼如下:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class MailController extends Controller {
   public function basic_email(){
      $data = array('name'=>"zaixian-User"); Mail::send(['text'=>'mail'], $data, function($message) {
         $message->to('xuhuhu.com@gmail.com', 'zaixian zaixian')->subject
            ('Laravel Basic Testing Mail');
         $message->from('xxxxxx@qq.com','zaixian Author');
      });
      echo "Basic Email Sent. Check your inbox.";
   }

   public function html_email(){
      $data = array('name'=>"zaixian-User"); Mail::send('mail', $data, function($message) {
         $message->to('zaixian_com@qq.com', 'zaixian zaixian')->subject
            ('Laravel HTML Testing Mail');
         $message->from('xxxxx@qq.com','zaixian Author');
      });
      echo "HTML Email Sent. Check your inbox.";
   }

   public function attachment_email(){
      $data = array('name'=>"zaixian-User"); Mail::send('mail', $data, function($message) {
         $message->to('xuhuhu.com@gmail.com', 'zaixian zaixian')->subject
            ('Laravel Testing Mail with Attachment');
         $message->attach('D:\laravel\public\uploads\image.png');
         $message->attach('D:\laravel\public\uploads\test.txt');
         $message->from('xxxx@qq.com','zaixian Author');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}
第6步 - 將以下代碼複製到resources/views/mail.blade.php 檔。

resources/views/mail.blade.php

<h1>Hi, {{ $name }}</h1>
<p>Sending Mail from Laravel.</p>
第7步 - 添加以下行添加到 app/Http/routes.php 檔。

app/Http/routes.php

Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');
第8步 - 訪問以下網址測試基本電子郵件。

http://localhost:8000/sendbasicemail

第9步 - 輸出的畫面將是這個樣子。請檢查您的收件箱是否看到基本的電子郵件輸出。

第10步 - 訪問以下網址來測試HTML電子郵件。

http://localhost:8000/sendhtmlemail

第11步 - 輸出的畫面將是這個樣子。請檢查您的收件箱是否看到HTML的電子郵件輸出。


第12步 - 請訪問以下網址使用附件測試HTML電子郵件。

http://localhost:8000/sendattachmentemail

第13步 - 輸出畫面將是這個樣子。請檢查您的收件箱看到有附件的HTML電子郵件輸出。

打開郵件後:

注 - 在MailController.php檔中的表單方法的電子郵件地址是用來發送電子郵件的電子郵件地址。一般來說,它應是伺服器上配置的電子郵件地址。


上一篇: Laravel檔上傳 下一篇: Laravel Ajax