print( sjw.iq == 200) output : true

[Laravel] Laravel에서 AWS SES를 이용한 Mail 전송하기 본문

PHP

[Laravel] Laravel에서 AWS SES를 이용한 Mail 전송하기

sjwiq200 2020. 1. 28. 19:22
728x90
반응형
MAIL_DRIVER=ses

안녕하세요! Laravel에서 AWS SES 를 이용하여 Mail 전송하기를 포스팅해보려고 합니다!

 

AWS SES 셋팅을 먼저 해주시길 바랄게요!

어렵지 않습니다!

참고: https://sjwiq200.tistory.com/49

 

[AWS SES] 아마존 메일 서비스 사용하기

우선 SES는 Simple Email Service 의 줄임말 입니다! aws 콘솔에서 ses를 선택하여 줍니다! 그러면 다음과 같은 화면이 나옵니다. 서울은 이용가능하지 않다고 나오네요 ㅠㅠ 저는 아시아 태평양 (시드니) 를 선..

sjwiq200.tistory.com

 

우선 아마존 SES 드라이버를 사용하려면 먼저 반드시 아마존 AWS SDK for PHP 를 설치해야 합니다!

 

composer.json 파일 require에 aws-sdk-php 를 작성하여 주시고 composer update를 해줍시다!

 

"aws/aws-sdk-php": "~3.0"

 

 

그리고 나서 .env에 MAIL_DRIVER를 수정해줍시다

기본은 smtp로 되어있을거에요!

다음과 같이 수정해줍시다!

 

MAIL_DRIVER=ses

 

그리고 AWS IAM 키를 생성해야 하는데요!

이 부분은 나중에 포스팅해야 할 거 같아요 ㅠㅠ 다른곳에서 찾으시면 금방 찾으실 수 있을거에요!

 

IAM 키를 생성하게 되면 ACCESS_KEY와 SECRET__KEY를 얻을 수 있습니다!

 

.env에 다음과 같이 설정해주세요!

 

AWS_ACCESS_KEY_ID=ㅇㅅㅇ
AWS_SECRET_ACCESS_KEY=ㅇㅅㅇ
AWS_SES_REGION=ap-southeast-2
MAIL_FROM_ADDRESS=sjwiq200@zzieut.com
MAIL_FROM_NAME=sjwiq200

그리고 /config/services.php 파일에 한번 가봅시다!

 

ses에 대해 작성된 부분이 있는데요!

env의 name 값과 일치하는지 확인해 줍시다~!

'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_SES_REGION', 'us-east-1'),
    ],

 

그리고 /app 밑에 Mails라는 디렉토리를 생성해주시구

AmazonSes.php 라는 파일을 만들어 주실게요!

 

해당 파일은 다음과 같이 작성하시면 됩니다.

아까 작성한 env에서 보내는 사람 주소를 설정해주면 됩니다!

보내는 사람이 계속 바뀌면 바꾸어 주면 되겠습니당.

 

# 메일 전송시 view가 필요하던데 정확한 이유는 다음에 다시 포스팅 하도록 할게요..! 저의 view에는 그냥 body에 $email_content['content'] 하나만 출력되어 있습니다.

<?php
namespace App\Mails;


use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class AmazonSes extends Mailable {
    use Queueable, SerializesModels;
    public $email_content;

    public function __construct($email_content) {
        $this->email_content = $email_content;
    }

    public function build() {
        return $this->from(env('MAIL_FROM_ADDRESS'))->subject($this->email_content['subject'])->view('emails.mail');
    }
}

 

그리고 해당 Mailable를 확장한 클래스를 호출하는 제 컨트롤러 소스를 봐보겠습니다.

 

<?php
namespace App\Http\Controllers;

use App\Library\ReturnCode;
use App\Mails\AmazonSes;
use App\ThemeBackFunctions;
use App\ThemeBorders;
use App\ThemeColors;
use App\ThemeFontOptions;
use App\ThemeFrontFunctions;
use App\Themes;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\View;


class MailController extends BaseController
{

    public function test () {
        // single email
        $data = array(
            'target_email' => array(
                array(
                    'name' => '네이버잡스',
                    'email' => 'sjwiq200@naver.com'
                )
            ),
            'subject' => '재우 짱짱맨',
            'content' => '안녕하세요 <a href="https://~~zzieut.pdf" >pdf 다운로드 </a>'
        );
        // multi email
        /*$data = array(
            'target_email' => array(
                array(
                    'name' => '네이버잡스',
                    'email' => 'sjwiq200@naver.com'
                ),
                array(
                    'name' => '지메일잡스',
                    'email' => 'sjwiq200@gmail.com'
                )
            ),
            'subject' => '재우 짱짱맨',
            'content' => '안녕하세요'
        );*/
        return $this->sendMail($data);
    }

    /**
     * @param $options
     * $options['target_email']
     * $options['subject']
     * $options['content']
     * @return string
     */
    public function sendMail($options) {

        Mail::to($options['target_email'])->send(new AmazonSes(array(
            'subject' => $options['subject'],
            'content' => $options['content']
        )));
        return 'Done!';
    }

}

 

 

하나의 이메일을 보낼 떄와  여러 개의 이메일을 보내는 예제 코드 입니당.

보시는 바와 같이 정말 간단하죠? ㅎㅎㅎ

그리고 html 태그를 작성하실 수도 있습니다!

 

감사합니다.

728x90
반응형
Comments