フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

aws-sdk-php-laravelでSESを利用してメールを送信する

はじめに

  • 前回、aws-sdk-php-laravelをインストールしたので、こちらを利用してSESを利用してメールを送信する px-wing.hatenablog.com

設定ファイル

  • config/services.phpに下記を追記する
'ses' => [
    'key' => env('AWS_SES_ACCESS_KEY_ID'),
    'secret' => env('AWS_SES_SECRET_ACCESS_KEY'),
    'region' => env('AWS_SES_DEFAULT_REGION', 'ap-southeast-2'),
],
  • .envファイルに下記を追加する
AWS_SES_ACCESS_KEY_ID=【アクセスキー】
AWS_SES_SECRET_ACCESS_KEY=【シークレットアクセスキー】
AWS_SES_DEFAULT_REGION=【SESを使うリージョン】

ルーティング設定

  • 下記の設定をする
Route::get('/mail/new', [MailFormController::class, 'new']);
Route::post('/mail/send', [MailFormController::class, 'send']);

コントローラー

  • newはお問い合わせフォーム画面用
  • sendはsesからメールを送信する処理
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App;
use AWS;

class MailFormController extends Controller
{
    public function new(){
        return view('mail_forms.new');
    }

    public function send(Request $request){
        $original_encoding = mb_internal_encoding();
        $to = mb_encode_mimeheader(mb_convert_encoding($request->input('name'),"ISO-2022-JP-MS",$original_encoding), 'ISO-2022-JP-MS')." <".$request->input('email').">";
        
        $ses = AWS::createClient('ses');
        $ses->sendEmail([
            'Source' => '<送信元メールアドレス>',
            'Destination' => [
              'ToAddresses' => [
                $to,
              ],
            ],
            'Message' => [
              'Subject' => [
                'Charset' => 'UTF-8',
                'Data' => $request->input('subject'),
              ],
              'Body' => [
                'Text' => [
                  'Charset' => 'UTF-8',
                  'Data' => $request->input('comments'),
                ],
              ],
            ],
          ]);
        return view('mail_forms.new');
    }
}

View

@extends('layouts.app')

<form action="/mail/send" method="post" method="post" id="reused_form">
    {{ csrf_field() }}
    <div class="container">
    <div class="row">
        <div class="col-sm-6 form-group">
            <label for="name">
                Your Name:</label>
            <input type="text" class="form-control" id="name" name="name" required>
        </div>
        <div class="col-sm-6 form-group">
            <label for="email">
                Email:</label>
            <input type="email" class="form-control" id="email" name="email" required>
        </div>
    </div>
    <div class="row">
        <div class="col-sm-12 form-group">
            <label for="subject">
                Subject:</label>
            <input type="subject" class="form-control" id="subject" name="subject" required>
        </div>
    </div>
    <div class="row">
        <div class="col-sm-12 form-group">
            <label for="comments">
                Comments:</label>
            <textarea class="form-control" type="textarea" name="comments" id="comments" placeholder="Your Comments" maxlength="6000" rows="7"></textarea>
        </div>
    </div>
    
    <div class="row">
        <div class="col-sm-12 form-group">
            <button type="submit" class="btn btn-lg btn-primary btn-block" >メール送信</button>
        </div>
    </div>
    </div>
</form>

f:id:PX-WING:20201103203417p:plain

送信結果

f:id:PX-WING:20201103204009p:plain