본문으로 바로가기

1. 구글 SMTP 기본 정보

  • SMTP 서버: smtp.gmail.com
  • 포트: 587 (TLS), 465 (SSL)
  • 인증 필요: 네, Gmail 계정과 비밀번호 또는 앱 비밀번호 사용
  • 보안: TLS/SSL 필수

2. AWS에서 구글 SMTP 사용 시 주의사항

(1) AWS 보안 그룹 설정

  • AWS 인스턴스의 보안 그룹(Security Group) 에서
    Outbound(아웃바운드) 규칙에 SMTP 포트 (보통 587 또는 465)로 인터넷 연결 허용 필요
  • 예:
    • Protocol: TCP
    • Port Range: 587 (또는 465)
    • Destination: 0.0.0.0/0 (또는 구글 SMTP IP 대역)

(2) VPC 네트워크 ACL 확인

  • VPC 네트워크 ACL에서 아웃바운드/인바운드 규칙이 SMTP 포트를 막고 있지 않은지 확인하세요.

(3) AWS EC2 기본 정책 확인

  • AWS는 기본적으로 포트 25(기본 SMTP 포트)를 차단하는 경우가 많음 (스팸 방지 목적)
  • 587이나 465 포트는 보통 차단하지 않으나, 만약 문제 있으면 AWS 지원에 문의해서 해제 요청 가능

3. Gmail 계정 보안 설정

  • 기본적으로 구글은 외부 앱에서 로그인 시 보안을 엄격하게 제한합니다.
  • Gmail 계정을 이용할 때는 다음 중 하나 필요:
    • 2단계 인증 활성화 후 앱 비밀번호 생성 → Laravel 메일 설정에 앱 비밀번호 사용
    • 혹은 "보안 수준이 낮은 앱 허용" (2022년 이후 대부분 막힘)
  • 개인 Gmail 계정보다는 G Suite(구 Google Workspace) 계정을 권장합니다.

 

 

 

4. Laravel .env 예시

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@gmail.com
MAIL_FROM_NAME="Your App Name"

 

1. Artisan 커맨드로 메일 테스트하기 (Laravel 9 이상)

Laravel 9.23부터 내장된 mail:send 명령어로 간단하게 테스트 가능해요.

터미널에서 아래 명령 실행:

 
php artisan mail:send --to=받는사람이메일@example.com

 

 

2. 직접 메일 전송하는 코드 작성하기

(1) 테스트용 Mailable 클래스 만들기

php artisan make:mail TestMail

 

app/Mail/TestMail.php 파일 열어서 build() 메서드 수정:

<?php

namespace App\Mail;

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

class TestMail extends Mailable
{
    use Queueable, SerializesModels;

    public function build()
    {
        return $this->subject('메일 테스트')  // 메일 제목
                    ->view('emails.test'); // 뷰 파일 지정
    }
}

 

(2) 메일 뷰 만들기

resources/views/emails/test.blade.php 파일 생성:

 

<!DOCTYPE html>
<html>
<head>
    <title>메일 테스트</title>
</head>
<body>
    <h1>이것은 Laravel 메일 테스트입니다.</h1>
    <p>메일이 정상적으로 발송되면 잘 작동하는 것입니다.</p>
</body>
</html>

 

(3) 라우트나 컨트롤러에 테스트용 코드 추가

예: routes/web.php 에 아래 코드 추가:

use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

Route::get('/mail-test', function () {
    Mail::to('받는사람이메일@example.com')->send(new TestMail());
    return '메일을 보냈습니다!';
});

 

브라우저에서 http://your-app-url/mail-test 접속하면 메일 발송 시도