PHP(Laravel 등)나 Python(FastAPI 등) 애플리케이션에서 Gmail SMTP 서버를 이용해 이메일을 보내는 방법을 정리했습니다. 특히 Gmail 계정에 2단계 인증(2-Step Verification)을 적용하지 않는 대신 앱 비밀번호(App Password)를 생성하여 SMTP 인증에 사용하는 절차를 중점적으로 다룹니다. 각 단계별 설정값과 코드 예시, 발생 가능한 보안 이슈 및 2025년 기준 Gmail 정책 정보까지 포함하였으니 순서대로 따라해보세요.

Gmail을 SMTP 발송 서버로 사용할 때 필요한 기본 설정값은 다음과 같습니다 (How To Set Up Your Gmail SMTP Settings (2025 Guide)) (How To Set Up Your Gmail SMTP Settings (2025 Guide)):
위 설정에서 포트(port)는 보안 방식에 따라 선택합니다. 일반적으로 포트 587 + STARTTLS(TLS)을 많이 사용하며, 이때 STARTTLS 명령으로 암호화된 통신을 시작합니다. 포트 465는 연결 시 바로 SSL 암호화(Implicit SSL)를 사용하는 방법으로, Laravel이나 메일 라이브러리 설정 시 Encryption(암호화) 옵션을 "ssl"로 지정해 사용합니다. 두 방식 모두 Gmail에서 지원하며 동일한 SMTP 서버 주소를 사용합니다 (IMAP, POP, and SMTP | Gmail | Google for Developers). 또한 Gmail SMTP는 반드시 SSL/TLS 보안 연결과 인증을 요구하므로, 보안 설정 없이 보내면 Gmail 측에서 연결을 거부합니다.
앱 비밀번호(App Password)는 Gmail 계정의 기본 비밀번호 대신 특정 앱이나 기기에서 사용할 수 있도록 발급하는 16자리 전용 비밀번호입니다. Gmail은 보안 강화를 위해 2단계 인증이 활성화된 계정에서만 앱 비밀번호를 생성할 수 있도록 제한하고 있습니다 (How to generate app password is a 16-digit passcode that gives a less secure app). 따라서 2단계 인증을 활성화한 후 앱 비밀번호를 발급받아 SMTP용 비밀번호로 사용해야 합니다. (2025년 현재 2단계 인증을 사용하지 않는 계정은 앱 비밀번호 발급이 불가하며, 과거에 존재하던 '보안 수준이 낮은 앱의 액세스 허용' 옵션은 2022년부터 단계적으로 폐지되었습니다 (Gmail Is Disabling Less Secure Apps on September 30, 2024).)
참고: 앱 비밀번호는 2단계 인증을 켠 계정에서만 발급되며, 만약 2단계 인증을 끄거나 Google 계정 기본 비밀번호를 변경하면 기존에 발급된 모든 앱 비밀번호는 더 이상 유효하지 않게 됩니다 (Gmail Is Disabling Less Secure Apps on September 30, 2024). 또한 2단계 인증을 사용하지 않는 계정의 경우 과거에는 보안 수준이 낮은 앱 허용 설정으로 일반 비밀번호를 사용하는 방법이 있었으나, Google은 2022년 5월 30일부터 일반 비밀번호를 사용하는 SMTP 접속을 전면 차단하였습니다 (Gmail Is Disabling Less Secure Apps on September 30, 2024). 그러므로 현재는 반드시 2단계 인증 + 앱 비밀번호 방식으로 설정해야 합니다.
Laravel에서 Gmail SMTP를 사용하려면 메일 환경설정을 .env 파일과 config/mail.php 파일에 지정해야 합니다. 우선 프로젝트 루트의 .env 파일에 SMTP 정보를 다음과 같이 추가하거나 수정합니다:
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=yourgmail@gmail.com
MAIL_PASSWORD=발급받은앱비밀번호16자리
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=yourgmail@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
([Send Email in Laravel with Gmail SMTP: Code Snippets [2025]](https://mailtrap.io/blog/laravel-send-email-gmail/#:~:text=MAIL_MAILER%3Dsmtp%20MAIL_HOST%3Dsmtp.gmail.com%20MAIL_PORT%3D465%20MAIL_USERNAME%3Dmygoogle%40gmail.com%20MAIL_PASSWORD%3D,APP_NAME))
위 설정에서 `MAIL_USERNAME`에는 Gmail 이메일 주소, `MAIL_PASSWORD`에는 앞서 생성한 앱 비밀번호를 입력합니다. `MAIL_ENCRYPTION`은 사용 포트에 맞춰 `"tls"` 또는 `"ssl"`로 설정할 수 있습니다. 예를 들어 포트로 587을 사용한다면 `MAIL_PORT=587`과 `MAIL_ENCRYPTION=tls`로, 포트 465를 사용한다면 `MAIL_ENCRYPTION=ssl`로 변경하는 식입니다. (`tls`는 STARTTLS 방식, `ssl`은 SSL 방식 연결을 의미합니다.)
Laravel 8 이상 버전의 `config/mail.php` 파일을 열어보면, 기본적으로 `.env`의 설정을 불러오도록 되어 있습니다. 예를 들면 `config/mail.php` 내에 아래와 같은 설정이 포함되어 있습니다:
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
// ... (생략)
],
// ... 다른 메일러 설정 생략
],
'from' => [
'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
따라서 .env 파일에 올바르게 값을 넣었다면 별도로 mail.php를 수정하지 않아도 기본 메일러로 Gmail SMTP를 사용하게 됩니다. (MAIL_MAILER가 smtp로 지정된 경우) 만약 Laravel 프로젝트에서 여러 메일러를 병행 사용한다면 mail.php에 필요한 mailer 설정을 추가하고 MAIL_MAILER값으로 해당 mailer의 키를 지정하면 됩니다.
이제 Laravel에서 메일을 전송할 때는 일반적인 Mail API를 그대로 사용하면 됩니다. 예를 들어 Mailable 클래스를 생성하여 다음과 같이 메일을 보내면 .env에 설정된 Gmail SMTP 계정을 통해 실제 이메일이 발송됩니다:
Mail::to($userEmail)->send(new MyTestEmail($content));
Laravel이 내부적으로 위 설정한 Gmail SMTP (smtp.gmail.com)로 연결하여 메일을 보냅니다.
백엔드가 Python인 경우에도 Gmail SMTP로 메일을 보낼 수 있습니다. Python의 내장 smtplib 모듈이나 편의 라이브러리인 yagmail, 또는 FastAPI 전용 메일 라이브러리인 fastapi-mail 등을 사용하면 됩니다. Gmail SMTP 설정값(호스트, 포트, 계정정보)은 앞서와 동일하며, 앱 비밀번호를 사용하는 것이 핵심입니다.
Python 표준 라이브러리의 smtplib과 email 모듈을 사용하여 Gmail SMTP 서버로 메일을 보내는 간단한 예시는 다음과 같습니다:
import smtplib
from email.mime.text import MIMEText
# Gmail SMTP 서버 정보
smtp_server = "smtp.gmail.com"
smtp_port = 587 # TLS 포트
username = "yourgmail@gmail.com"
password = "발급받은앱비밀번호16자리"
# 이메일 메시지 구성
msg = MIMEText("메일 본문 내용입니다.")
msg['Subject'] = "테스트 메일 제목"
msg['From'] = username
msg['To'] = "recipient@example.com"
# SMTP 서버에 연결하여 메일 보내기
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # TLS 보안 연결로 업그레이드
server.login(username, password) # Gmail 계정 로그인 (앱 비밀번호 사용)
server.sendmail(msg['From'], msg['To'], msg.as_string()) # 메일 전송
server.quit()
위 코드에서는 포트 587로 연결한 뒤 starttls()를 호출해 TLS 암호화 채널로 전환하고, Gmail 계정 자격증명(이메일 주소, 앱 비밀번호)으로 로그인합니다. 그런 다음 sendmail로 메일을 발송합니다. 앱 비밀번호를 사용하므로 추가적인 2단계 인증 과정 없이도 Gmail SMTP서버가 로그인을 허용합니다.
yagmail은 Gmail 전송에 특화된 Python 패키지로, OAuth2 설정이나 SMTP 설정을 쉽게 처리해줍니다. 앱 비밀번호를 이용해 간편하게 보낼 수도 있습니다. 예를 들어 pip install yagmail로 설치한 후 다음처럼 사용할 수 있습니다:
import yagmail
yag = yagmail.SMTP(user="yourgmail@gmail.com", password="발급받은앱비밀번호16자리")
yag.send(to="recipient@example.com", subject="테스트 메일", contents="본문 내용")
yagmail.SMTP 객체 생성 시 Gmail 계정과 앱 비밀번호를 넣으면 바로 인증이 이루어지며, send() 메소드로 수신자, 제목, 내용을 지정해 이메일을 발송할 수 있습니다.
FastAPI 어플리케이션에서 비동기로 이메일을 보내려면 fastapi-mail 라이브러리를 사용할 수 있습니다. fastapi-mail의 ConnectionConfig에 Gmail SMTP 정보를 설정한 후, FastMail 클래스를 통해 메일을 보낼 수 있습니다. 예시는 다음과 같습니다 (환경에 맞게 값 설정):
from fastapi_mail import FastMail, MessageSchema, ConnectionConfig
conf = ConnectionConfig(
MAIL_USERNAME = "yourgmail@gmail.com",
MAIL_PASSWORD = "발급받은앱비밀번호16자리",
MAIL_SERVER = "smtp.gmail.com",
MAIL_PORT = 587,
MAIL_TLS = True,
MAIL_SSL = False,
MAIL_FROM = "yourgmail@gmail.com",
MAIL_FROM_NAME = "My App"
)
message = MessageSchema(
subject="안녕하세요",
recipients=["recipient@example.com"], # 수신자 리스트
body="FastAPI를 통해 보내는 테스트 이메일입니다.",
subtype="plain"
)
fm = FastMail(conf)
await fm.send_message(message)
위 설정에서 MAIL_TLS=True, MAIL_SSL=False와 포트 587 조합은 Gmail TLS 연결을 의미합니다 (Sending Email using FastAPI Framework in Python - GeeksforGeeks). MAIL_USERNAME과 MAIL_PASSWORD에 Gmail 주소와 앱 비밀번호를 넣으면 FastMail 객체가 내부적으로 Gmail SMTP에 인증을 수행합니다. 그런 다음 send_message를 통해 비동기적으로 메일을 발송합니다. (FastAPI의 경우 send_message는 코루틴이므로 호출 시 await가 필요합니다.)
Gmail SMTP를 사용하여 메일을 보내는 초기 설정 과정에서 몇 가지 보안 경고나 로그인 차단 이슈가 발생할 수 있습니다. 이에 대한 원인과 해결 방법을 정리합니다:
요약하면, Google 계정 보안 설정을 올바르게 준비(2FA 및 앱 비밀번호 사용) 하고, 처음 연결 시 계정 측의 확인 절차(보안 알림 확인 또는 Unlock Captcha)를 거치면 Gmail SMTP로 무리없이 메일을 보낼 수 있습니다.
2025년 현재 Gmail의 SMTP 사용 정책은 보안을 위해 몇 가지 제한을 두고 있습니다:
정리하면, Gmail SMTP를 통한 메일 전송은 2025년에도 가능하지만 보안상 App Password 또는 OAuth2 인증이 필수이며, 일일 전송량(무료 계정 500통) 등의 제한이 있습니다. Gmail을 SMTP로 활용할 때는 이 제한 사항을 염두에 두고, 소량의 알림이나 문의메일 전송 등에 적절히 사용하는 것이 바람직합니다.