1. 配置文件
Laravel集成了SwiftMailer庫進行郵件發送,郵件配置文件位於config/mail.php
<?php
return [
'driver' => env('MAIL_DRIVER', 'smtp'), //配置默認的郵件發送驅動
//host是郵箱所在主機,比如我們使用163郵箱,對應值是smtp.163.com,
//使用QQ郵箱的話,對應值是smtp.qq.com
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
//port用於配置郵箱發送服務端口號,比如一般默認值是25,但如果設置SMTP使用SSL加密,該值爲465
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', '[email protected]'), //發送郵箱
'name' => env('MAIL_FROM_NAME', 'Example'), //發送郵件使用的用戶名
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
];
我的配置:
2. 定義路由
爲我們的測試在routes.php定義路由規則:
Route::get('mail/send','MailController@send');
3. 創建郵件發送控制器
php artisan make:controller MailController
純文本郵件發送可以使用Mail::raw方法
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
class MailController extends Controller
{
public function send()
{
Mail::raw('這是一封測試郵件', function ($message) {
$to = '[email protected]';
$message ->to($to)->subject('測試郵件222222');
});
}
}
Mail::send需要傳遞三個參數,第一個是郵件視圖,第二個是傳入視圖的數據,第三個是一個閉包,該閉包中定義了收件人、抄送人(如果有的話)、郵件主題、附件等信息。郵件的主體內容位於局部視圖中,下面我們就來定義這個局部視圖,在resources/views/emails目錄下新建test.blade.php,編輯其內容如下:
{{ $name }} 哈哈哈哈
使用Mail::send發送視圖郵件
public function send()
{
$name = '我叫liang 你好啊';
$flag = Mail::send('emails.test',['name'=>$name],function($message){
$to = '[email protected]';
$message->to($to)->subject('測試郵件22222');
});
if( count(Mail::failures()) > 0 ){
echo '發送郵件失敗,請重試!';
}else{
echo '發送郵件成功,請查收!';
}
}
使用make:mail生成郵件
php artisan make:mail OrderShipped
該命令會在 app/mail 目錄下生成一個繼承於Mailable的郵件類。類中的build方法用於構建郵件。
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.test');
}
那麼怎麼向視圖傳遞數據呢?有兩種方法
- Mailable 類任何公共屬性都可以在視圖中使用
- 使用 with 方法來傳遞數據給模板
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.test')->subject('Order Shipped')
->with(['other' => '這是通過with方法攜帶的數據']);
}
}
發送郵件
使用 Mail 門臉的 to 方法。 to 方法接受一個郵件地址,一個 user 實現或一個 users 集合。如果傳遞一個對象或集合,mailer 將自動使用 email 和 name 屬性來設置郵件收件人,所以確保你的對象裏有這些屬性。一旦指定收件人,你可以傳遞一個實現到 Mailable 類的 send 方法
public function send()
{
$data = '通過公共屬性發送的數據';
Mail::to('[email protected]')
->send(new OrderShipped($data));
}