iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
1
Software Development

30天完成家庭任務平台系列 第 24

30天完成家庭任務平台:第二十四天

  • 分享至 

  • xImage
  •  

當你邀請了家庭任務平台的成員參與你的計畫時,你可以發一封邀請信通知他們,因此這次要來談郵件設定。

Laravel對很多email服務提供了設定,所以可以輕鬆串接你已經有或想要使用的服務,像是Mailgun、Postmark、 Amazon SES等,但如果是私人用途的話,可以使用大家都很熟悉的Gmail來寄信。

  1. 在.env檔案修改Mail的相關變數
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. 處理email

(1) 新增一個Mailable類別,下指令後會在app/Mail中中出現InvitationInformed的檔案

php artisan make:mail InvitationInformed

(2)設定email需要的變數

email中會出現被邀請人的名稱和被邀請專案的網址,但是每個email的邀請人的名稱和被邀請計畫的網址並不相同,為了讓email可以使用計畫跟使用者這兩個變數,我們必須要用做下列設定。

  • 設定計畫跟使用者這兩個公開變數,並指定回傳的email樣板為emails.invitation。
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>
  1. 在Controller中設定要寄送的email地址,並傳入使用者與計畫兩個變數讓email使用

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')));
    }
}
  1. 設定Gamil的安全性等級

要允許你的Laravel應用程式存取該帳戶,所以必須開啟低安全性應用程式存取權。

https://ithelp.ithome.com.tw/upload/images/20201009/20129592ueLtAGth2w.png

  1. 最後成功寄出郵件

https://ithelp.ithome.com.tw/upload/images/20201009/20129592HGLzaafilu.png

參考文章:
How to send an Email in Laravel using Gmail SMTP Server
Laravel-Mail


上一篇
30天完成家庭任務平台:第二十三天
下一篇
30天完成家庭任務平台:第二十五天
系列文
30天完成家庭任務平台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言