:::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)