본문 바로가기
Programming/Backend

[Laravel] gmail을 이용해서 메일 보내기

by BitSense 2019. 12. 15.
반응형

Laravel 기본 vendor를 이용하여 메일 전송하는 소스 입니다.

1. 메일 발송용 컨트롤러 생성

php artisan make:controller MailController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{
    /**
     * 메일 전송 소스 입니다. 테스트 용으로 하드코딩을 했습니다.
     *
     * @return string
     */
    public function send(Request $request)
    {
        $user = array(
            'email' => 'yourcount@gmail.com',
            'name'  => 'yourname'
        );

        $data = array(
            'detail'=> 'Your awesome detail here',
            'name'  => $user['name']
        );

        Mail::send('emails.welcome', $data, function($message) use ($user)
        {
            $message->from('master@betanews.net', 'Betanews Master');
            $message->to($user['email'], $user['name'])->subject('Welcome!');
        });

        return 'Done!';
    }
}

2. 메일용 폼 블레이드 php 파일 작성

위 소스에서 Mail::send() 함수의 첫번째 파람이 메일용 폼 블레이드 파일명입니다.

'emails.welcome' > resources/views/emails/welcome.blade.php 입니다.

Your sign up details are below:
{{ $detail }},
{{ $name}}

3. 기타 메일 설정 변경

.env 메일 설정 변경 혹은 config/mail.php를 직접 변경

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_id@gmail.com
MAIL_PASSWORD=app_password
MAIL_ENCRYPTION=tls

routes/api.php 추가 (메일 전송용 api 로 추가함)

Route::get('mail', 'MailController@send');

----

Gmail을 이용하여 메일을 전송하는 것이 간단하다고 생각을 하고 있었습니다. 하지만 소스만 정리한다고 되지 않네요. 과거 Google이 계정 강화를 위해서 보안 단계를 만들었는데, 여기에 웹 접근이 아닌 외부 앱으로 접근하는 경우를 대비해서 비밀번호를 별도 추가해서 관리하도록 했습니다.

메일 전송을 위한 앱용 비밀번호 추가 방법

먼저, 구글 계정(https://myaccount.google.com/) 페이지로 이동합니다. 먼저 앱 비밀번호를 설정하기 위해서 2단계 인증까지 설정을 완료하셔야 합니다. (기회가 닿으면 별도 내용도 정리를 해보겠습니다.)

보안 메뉴로 이동합니다.

보안 메뉴 > Google에 로그인 > 앱 비밀번호 항목을 선택합니다.

본인 확인을 위한 비밀번호를 재확인 합니다.

접속할 기기/장비의 비밀번호 생성을 위해 앱을 선택합니다.

저는 기타(맞춤 이름) 을 선택하여 별도 이름을 추가했습니다.

접근할 앱, 기기/장비 이름을 추가 후 [생성] 버튼을 클릭합니다.

팝업창이 뜨면서 "기기용 앱 비밀번호"를 생성하여 알려 줍니다. 해당 16자리 번호를 .env 파일의 MAIL_PASSWORD에 붙여넣기를 합니다.

다시 메일 전송을 하면 정상적으로 나올 것입니다.

혹시 Gmail로 메일 발송하시는 분들에게 도움이 되었으면 합니다. ^^

반응형