---
# System prepended metadata

title: '[Laravel]Send Mail'
tags: [AWS, laravel]

---

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