[程式開發] Laravel 寄信服務 使用 Gmail 設定

想要在Laravel中使用寄信服務 也就是網站能寄信給使用者 , 這邊可以使用gmail 帳號 當做官方Email

1. 首先Gmail 帳號必需要開起雙重驗正  https://www.google.com/landing/2step/

2. 之後到我的帳戶去新增應用程式的密碼 也就是幫網站產生一組密碼

https://myaccount.google.com/u/3/security




https://security.google.com/settings/u/3/security/apppasswords
這邊應用程式的密碼 等一下設定的時候會用到

















產生好後的畫面












如果跳過以上app password 直接將email 的密碼填入.env 會出現
Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 wd7sm12843789wjc.36 - gsmtp "

3.到Laravel 專案的 .env 設定 郵件服務 這邊分兩種 看你的網站有沒有ssl

如果沒有就用以下設定 填好 email 還有 app password
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls
有用ssl就用以下設定
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=ssl

如果上述沒有設定好 可能會出現

Expected response code 220 but got code “”, with message “”  問題



4. 設定好後 測試寄信服務並 在routes.php中新增以下程式碼 並修改from to 的email

Route::get('sendemail', function () {

    $data = array(
        'name' => "Learning Laravel",
    );

    Mail::send('emails.welcome', $data, function ($message) {

        $message->from('yourEmail@domain.com', 'Learning Laravel');

        $message->to('yourEmail@domain.com')->subject('Learning Laravel test email');

    });

    return "Your email has been sent successfully";

});
5.並且新增以下 blade 定義郵件的內容 (Mail::send的第一個參數 /emails/welcome.blade.php )
<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="utf-8">
</head>
<body>
<h2>Learning Laravel!</h2>

<div>
    Welcome to {!! $name !!} website!
</div>

</body>
</html>
6.最後輸入網址http://yourdomainname/sendemail 出現Your email has been sent successfully 表示成功囉 此時去收信一下就會看到了!

7. 如果沒有填 from 的 那欄 系統會用config/mail.php 中的null 會出現錯誤

Cannot send message without a sender address 

此時將mail.php中的from修改成
'from' => ['address' => env('MAIL_FROM', null), 'name' => env('MAIL_NAME', null)],
並到.env設定MAIL_FROM,MAIL_NAME兩個變數即可

參考資料:http://learninglaravel.net/learn-to-send-emails-using-gmail-and-sendgrid-in-laravel-5















沒有留言:

張貼留言