引言
上一章我們為發電子郵件準備了貼心的表單,完善的資料驗證,那麼本篇我們講解如何在laravel內傳送一封電子郵件。
電子郵件非常方便,大家切勿濫用。
程式碼時間
laravel整合了熱門且功能強大的SwiftMailer庫,為我們封裝了傳送郵件所需要的底層邏輯,所以我們只需關注傳送的邏輯,
如何準備電子郵件的內容即可。
laravel配置檔案 config/mail.php 內預設的 smtp 引數:
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'auth_mode' => null,
],
主要用於指定傳輸協議,主機地址,埠號,加密方式,使用者名稱與密碼等。
因為國外的緣故,預設使用了mailgun作為郵件伺服器,這樣免得使我們自己的郵件伺服器傳送的郵件,
被識別為垃圾郵件,影響業務流程。
註冊免費額度的賬戶,可提供每月相應數額的郵件傳送數量。申請之後,在 app/services.php 配置檔案內可以看到如下程式碼:
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
],
我們把相應的變數在.env檔案內宣告即可。
郵件傳送類
把郵件傳送邏輯集中起來處理,我們需要把傳入的資料渲染出來,然後使用郵件將其發給使用者。
使用下面的指令生成郵件處理類:
php artisan make:mail ContactEmail
生成的檔案位於 app/Mail/ContactEmail.php,初始內容如下:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class ContactEmail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function build()
{
return $this->view('view.name');
}
}
例項化的時候,我們需要接收一些資料:
public $contact;
public function __construct($contact)
{
$this->contact = $contact;
}
給使用者發一封樣式友好的郵件,能大大提升使用者的粘度。所以在我們使用檢視渲染郵件:
public function build()
{
return $this->to(config('mail.from.address'))->subject('HackerPair Inquiry')->view('emails.contact');
}
建立檢視檔案 resources/views/emails/contact.blade.php,簡要地編寫資料渲染及格式:
Hi,
A Laravel user has sent you a message.
Name: {{ $contact['name'] }}
E-mail: {{ $contact['email'] }}
Message: {{ $contact['msg'] }}
傳送郵件
上一篇文章,我們使用 $contact 變數接收來自 request 請求體的欄位值。
上一節我們又把郵件傳送的模板準備好了,“萬事俱備只欠東風”,接下來就是傳送郵件的主流程邏輯了!
記得使用之前在頭部引入 App\Mail\ContactEmail:
Mail::to(config('mail.support.address'))->send(new ContactEmail($contact));
沒錯,一行就可以了!
寫在最後
整體而言還很初階,都是藉助於第三方的力量在實現功能。
比如郵件伺服器就有很多可定製方法。還有郵件傳送類,可以做很多定製模板,
那些都是細化的方面了。
Happy coding :-)
我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者
本作品採用《CC 協議》,轉載必須註明作者和本文連結