當你邀請了家庭任務平台的成員參與你的計畫時,你可以發一封邀請信通知他們,因此這次要來談郵件設定。
Laravel對很多email服務提供了設定,所以可以輕鬆串接你已經有或想要使用的服務,像是Mailgun、Postmark、 Amazon SES等,但如果是私人用途的話,可以使用大家都很熟悉的Gmail來寄信。
MAIL_MAILER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=你的GMAIL(xxx@gmail.com)
MAIL_PASSWORD=你的GMAIL密碼
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的GMAIL(xxx@gmail.com)
MAIL_FROM_NAME="${APP_NAME}"
(1) 新增一個Mailable類別,下指令後會在app/Mail中中出現InvitationInformed的檔案
php artisan make:mail InvitationInformed
(2)設定email需要的變數
email中會出現被邀請人的名稱和被邀請專案的網址,但是每個email的邀請人的名稱和被邀請計畫的網址並不相同,為了讓email可以使用計畫跟使用者這兩個變數,我們必須要用做下列設定。
class InvitationInformed extends Mailable
{
use Queueable, SerializesModels;
public $invitedUser;
public $project;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $invitedUser,Project $project)
{
$this->invitedUser = $invitedUser;
$this->project = $project;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.invitation');
}
}
* 設計自己的電子郵件樣板,在resources/views中建立emails檔案夾,並建立invitation.blade.php。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{{strtoupper($invitedUser->name)}} has been invited to join the project
{{$project->title}}.
Click <a href="{{route('project.show',['project'=>$project])}}">this</a> to join the project.
</body>
</html>
Mail::to(要寄送的email地址)->send(new InvitationInformed(要傳入的變數))。
class ProjectInvitationController extends Controller
{
public function store(InvitationRequest $request, Project $project)
{
$validated = $request->validated();
$invitedMember = User::whereEmail($validated['email'])->first();
Mail::to($invitedMember->email)->send(new InvitationInformed($invitedMember, $project));
$project->invite($invitedMember);
return redirect(route('project.show', compact('project')));
}
}
要允許你的Laravel應用程式存取該帳戶,所以必須開啟低安全性應用程式存取權。
參考文章:
How to send an Email in Laravel using Gmail SMTP Server
Laravel-Mail