:::info [TOC] ::: ## **導言** ### 紀錄如何用Laravel寄信 ## **設定** ## 在`.env`設定寄信方式、郵件地址、寄信人 ``` MAIL_MAILER=ses MAIL_FROM_ADDRESS=rd@critical.com.tw MAIL_FROM_NAME=null ``` 這裡寄信方法選擇SES,所以在`/config/mail.php`設定AWS KEY ```php! 'mailers' => [ ... 'ses' => [ 'transport' => 'ses', 'key' => env('AWS_ACCESS_KEY_ID', ''), 'secret' => env('AWS_SECRET_ACCESS_KEY', ''), 'region' => env('MAIL_SES_DEFAULT_REGION', 'us-east-1'), ], ... ] ``` ## **實例** ## **需求:** 希望能夠把使用者在網頁上填寫的反饋內容寄到公司信箱 **實作:** 使用SES進行發信 信件來自`rd@example.com` 寄件人名稱是`no-reply` 標題為 ``` 客戶反饋信 ``` 內容為 ``` 寄信人:小D 寄信內容:這次的活動做得很不錯! ``` **範例完整程式碼:** ```php! use Mail; $params['name'] = '小D'; $params['content'] = '這次的活動做得很不錯!'; try { Mail::send('emails.content', ['data' => $params], function ($message) { } catch (Exception $err){ echo 'err'; } ``` **程式碼內容:** Laravel 使用 `Mail::send` 方法來寄送電子郵件訊息 ```php! Mail::send('emails.content', ['data' => $params], function ($message) { $message->from(rd@example.com, 'no-reply'); $message->to(company@example.com)->subject('客戶反饋信'); }); ``` 第一個參數`'emails.content'`是信件內容的`views`,存放的位置是在 `/app/resources/views/emails/content.blade.php` `views`中的內容: ```html php= <!DOCTYPE html> <html > <body> ''' 信件內容會以html傳送 ''' </body> </html> ``` 第二個參數`['data' => $params]`是傳遞資料,通常是一個關聯式陣列,也就是將`$params`中的資料傳遞到`views` ```html php= <!DOCTYPE html> <html > <body> <p>寄信人:<?php echo $data['name']; ?></p> <p>寄信內容: <?php echo $data['content']; ?></p> </body> </html> ``` 第三個參數是一個閉包,可以對 message 進行各種設定 ```php! $message->from('收信顯示的寄信方address', '收信顯示的寄信方名稱'); $message->to('收信address')->subject('信件標題'); ``` ## **其他方法** ## 如果只是要寄送單純簡單的文字,可以用`Mail::raw`方法 ```php! Mail::raw('Text to e-mail', function($message) { $message->from('us@example.com', 'no-reply'); $message->to('foo@example.com')->subject('寄信測試') }); ``` 上面程式碼會寄出內容為`Text to e-mail`mail >⚠️ 注意:raw方法只能寄送單純的文字,所以內容有html標籤(例如換行)也會被轉成純文字寄出 其他更多方法:[Larvel](https://laravel.tw/docs/5.0/mail)