본문 바로가기
Develop/PHP

Laravel 메일 발송

by bellsilver7 2022. 4. 1.
728x90

Laravel 의 메일


https://laravel.com/docs/8.x/mail#introduction

Laravel 은 인기있는 SwiftMailer 라이브러리 기반으로 깨끗하고 간단한 이메일 API를 제공하기 때문에 복잡하지 않게 이메일을 보낼 수 있다. Laravel 과 SwiftMailer는 SMTP, Mailgun, Postmark, Amazon SES 및 sendmail을 통해 이메일을 전송하기 위한 드라이버를 제공하므로 자신이 선택한 로컬 또는 클라우드 기반 서비스를 통해 메일 전송을 빠르게 시작할 수 있습니다.



메일 보내기


1. 환경변수파일 .env 수정

MAIL_MAILER=smtp
MAIL_HOST={호스트}
MAIL_PORT={포트}
MAIL_USERNAME={계정}
MAIL_PASSWORD={비밀번호}

여기에 먼저 자신이 사용하고자 하는 메일 정보에 맞게 기입합니다.

 

2. 메일링 생성

> php artisan make:mail Common

터미널에서 위 명령을 실행하면 app\Mail 디렉토리가 생성되며 Mailable 클래스를 확장한 Common 클래스 파일이 생성됩니다.

 

<?php

namespace App\Mail;

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

class Common extends Mailable
{
    use Queueable, SerializesModels;

    public $content;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        //
        $this->content = $message['content'];
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('보내는메일', '보내는사람')
            ->view('mail')->with([
                'content' => $this->content,
            ]);
    }
}

메일 내용에 들어갈 $content 변수를 선언하고 위 클래스 호출시 $content 변수에 값을 넣도록 생성자에 파라미터를 받아 설정했습니다. 이제 build 함수에 보내는 메일 정보를 설정하고 content 를 view 햠수에 실었고 mail.blade.php 뷰 파일을 생성해 view 함수에 기입했습니다.

 

3. mail.blade.php 뷰 파일 생성

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{ env('APP_NAME') }}</title>
</head>

<body>
    {{ $content }}
</body>

생성한 뷰 파일 내에 위와 같이 작성해 $content 값을 출력할 수 있도록 했습니다.

 

4. MailContoller.php

use App\Mail\Common;
use Illuminate\Support\Facades\Mail; // Mail 파사드 추가

이제 메일을 발송하는 컨트롤러 생성해 Mail 파사드와 추가하고나면
아래와 같이 간단한 방법으로 메일을 보내는 것이 가능합니다.

Mail::to('받는메일')
    ->send(new Common(['content' => '라라벨 메일발송 테스트']));

 

정리, 어떻게 보면 여기 저기 파일을 만들어 복잡하게도 느껴지지만 각자의 역할이 명확히 나뉘어 실제 메일을 발송하는 부분에서 간편하게 보낼 수도 있고 디버깅에 및 코드 수정에도 용이할 수 있겠다.

728x90

댓글