상세 컨텐츠

본문 제목

laravel을 이용하여 메일 전송

개발/PHP, Laravel

by 조갱 2021. 11. 4. 18:24

본문

나중에 진행할 프로젝트에 쓸 기능으로 메일을 통해 인증번호를 전송하는 api를 작성했습니다.

이렇게 쓰일지는 모르겠지만 ... 혹시나 필요한 사람이 있을지 몰라 글을 씁니다.

인증번호 발급을 제외한 메일 발송에 대한 부분만 올리겠습니다.

 

0. 구글 앱 비밀번호 발급

구글 계정의 보안페이지로 이동한뒤 앱비밀번호를 설정합니다. 2단계 인증을 사용해야 앱 비밀번호를 설정할 수 있습니다.

 

저는 맥을 사용하여 앱 비밀번호를 생성할 앱 및 기기를 메일, Mac으로 선택했습니다.

 

 

1. env 작성

MAIL_MAILER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=your_mail@gmail.com
MAIL_PASSWORD=your_google_app_password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=from mail address
MAIL_FROM_NAME="${APP_NAME}"

MAIL_PASSWORD 는 발급받은 구글 앱 비밀번호를 입력하면 됩니다!. 

 

2. laravel\app\config\mail.php 수정

'mailers' => [
    'smtp' => [
        'transport' => env('MAIL_MAILER'),
        'host' => env('MAIL_HOST'),
        'port' => env('MAIL_PORT'),
        'encryption' => env('MAIL_ENCRYPTION'),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' =>null,
        'auth_mode' =>null,
    ],

		...
],

정확한 메커니즘은 모르겠지만 메일을 보내는데 꽤 시간이 걸리더군요. timeout을 설정할 경우 설정한 시간보다 전송시간이 오래걸리면 메일이 전송은 전송되지만 타임아웃 에러를 발생시켜 timeout을 null로 설정했습니다.

 

3. controller 작성

classEmailSendControllerextendsController
{
	public static function sendEmail($emailToken){
        $user = [
            'email' => $emailToken->send_email
        ];
        
        $data = [
            'token' => $emailToken->email_token
        ];
        
        Mail::send('email.certification_form', $data,function($message)use($user){
            $message->from(env('MAIL_FROM_ADDRESS'), env('MAIL_FROM_NAME'));
            $message->to($user['email'])->subject('메일 제목');
        });

		return'success';
    }
}

인증번호를 발급한 뒤 호출되기때문에 인증번호만 파라미터로 받았습니다.

 

4. blade 작성

<!DOCTYPEhtml>
<htmllang="{{ str_replace('_', '-', app()->getLocale()) }}">
  <head>

  </head>
  <body>
    <divstyle="padding: 40px; width: 100%; box-sizing: border-box">
        <divstyle="margin-bottom: 50px;">
            <pstyle="font-size: 30px">{{$token}}</p>
        </div>
    </div>
  </body>
</html>

메일을 어떻게 보낼지 태그로 설정 하면 됩니다!

저는 간단하게 인증번호만 보냈습니다.

 

5. 결과

메일이 정상적으로 발송되는것을 확인할 수 있습니다!

 

감사합니다!

'개발 > PHP, Laravel' 카테고리의 다른 글

laravel 프로젝트 iamport 결제, 환불 연동하기  (0) 2021.11.18
laravel timestamp UTC형식 변경  (0) 2021.11.12

관련글 더보기

댓글 영역