21강 - 메일 보내기

mailgun 서비스 가입하자

실습을 위해 라라벨에 기본 값으로 설정되어 있는 Mailgun 서비스에 가입하자. 월 1만통까지는 공짜라고 한다. 가입 후 반드시, 가입할 때 사용한 메일 계정으로 들어가서 활성화 링크를 눌러줘야 정상적으로 메일 발송이 가능하다.

메일 설정

config/mail.php 를 열어 보내는 사람 정보를 채우자.

'from' => ['address' => 'john@example.com', 'name' => 'John Doe'],

.env 를 열어 메일을 설정해 보자. MIAL_ 로 시작하는 나머지 설정은 모두 지우자.

MAIL_DRIVER=smtp
MAIL_USERNAME=your_mailgun_login_email
MAIL_PASSWORD=your_mailgun_login_password

메일을 보내 보자.

app/Http/routes.php 에 메일을 보내는 Route를 작성하자. 노파심에 다시 얘기하면, 학습을 위해 편의상 routes.php 에 작성하지만, 실전에서는 컨트롤러 (또는 서비스 로직)에 들어가야 하는 내용이다.

Route::get('mail', function() {
    $to = 'YOUR@EMAIL.ADDRESS';
    $subject = 'Studying sending email in Laravel';
    $data = [
        'title' => 'Hi there',
        'body'  => 'This is the body of an email message',
        'user'  => App\User::find(1)
    ];

    return Mail::send('emails.welcome', $data, function($message) use($to, $subject) {
        $message->to($to)->subject($subject);
    });
});

send() 메소는 3개의 인자를 받는다. 첫번째는 사용할 뷰, 두번 째는 뷰에서 바인딩 시킬 데이터, 세번째는 콜백이다.

참고 send() 대신 queue() 메소드를 사용하는 것이 편리하다. Queue 설정이 되어 있지 않으면, send()로 자동 폴백된다.

resources/views/emails/welcome.blade.php 를 만들자.

<h1>{{ $title }} {{ $user->name }}</h1>
<hr/>
<p>{{ $body }}</p>
<hr/>
<footer>Mail from {{ config('app.url') }}</footer>

블레이드 문법을 통해서 send() 메소드를 통해 넘겨 받은 데이터들을 바인딩하는 것을 볼 수 있다. config(string $key) (== Config::get(string $key)) 함수를 통해 config/**.php 에 위치한 설정 값을 읽을 수 있다.

브라우저를 열고 'mail' Route를 방문한 후, $to로 지정한 메일 계정으로 가서 이메일이 잘 왔나 확인해 보자.

테스트 방법

메일이 잘 가는 지를 테스트하기 위해 매번 실제로 메일을 보내는 것은 여러가지로 좋지 않다. 라라벨에서는 메일 테스트를 위해 'log' 드라이버를 제공하며, 메일 발송 결과를 storage/logs/laravel.log 에서 확인할 수 있다. .env에서 수정할 수 있다.

MAIL_DRIVER=log

로그파일은 tail 명령을 이용하면 관찰하기 편리하다.

$ tail -f ./storage/logs/laravel.log

참고 실전에서는 Mail::queue() 메소드를 한번 Wrapping 한 도메인 레이어용 메일러를 별도로 만들고, 컨트롤러의 생성자에 의존성 주입을 해서 사용한다. 또는 컨트롤러에서 이런 데이터로 메일을 보내줘라고 이벤트를 생성하고, 이벤트를 구독하는 클래스에서 별도의 프로세스로 메일을 보내는 작업을 하게 된다.




comments powered by Disqus
목록 토글
keyboard_arrow_up