Guide
Gmail SMTP 설정 2026: 포트·TLS·인증
개발자를 위한 완전한 Gmail SMTP 레퍼런스: smtp.gmail.com 설정, 포트 587 및 465 구성, 앱 비밀번호 만들기, OAuth 2.0 요구 사항, 전송 한도, 자주 발생하는 오류 코드, 그리고 설정이 전혀 필요 없는 CLI 대안까지 다룹니다.
Written by Qasim Muhammad Staff SRE
이 가이드에서 사용하는 명령어 레퍼런스: SMTP 없이 보내는 nylas email send, OAuth 인증을 위한 nylas auth login, 헤드리스 API 키 설정을 위한 nylas auth config, 메시지 검색을 위한 nylas email search입니다.
Gmail SMTP 서버 설정은 무엇인가요?
Gmail의 발신 메일 서버는 smtp.gmail.com입니다. STARTTLS 암호화는 포트 587, 암시적 SSL/TLS는 포트 465에서 연결을 수신합니다. 두 포트 모두 앱 비밀번호 또는 OAuth 2.0 액세스 토큰을 통한 인증이 필요합니다. 일반 Gmail 계정에서는 포트 25의 평문 연결을 사용할 수 없습니다. Gmail SMTP 설정 자체는 Google이 표준화한 이후 바뀌지 않았지만, 인증 방식은 2022년 이후 크게 좁혀졌습니다.
| 설정 | 값 |
|---|---|
| SMTP 서버 | smtp.gmail.com |
| 포트(STARTTLS) | 587 |
| 포트(SSL/TLS) | 465 |
| 암호화 | TLS 1.2 이상 필수 |
| 인증 | 앱 비밀번호 또는 OAuth 2.0 |
| 사용자명 | 전체 Gmail 주소(you@gmail.com) |
| 일일 한도(개인) | 500통 |
| 일일 한도(Workspace) | 2,000통 |
Google은 더 높은 처리량이 필요한 Workspace 계정을 위해 smtp-relay.gmail.com SMTP 릴레이도 운영합니다. 이 릴레이는 사용자당 하루 최대 10,000명의 수신자를 지원하며, 사용자 인증 정보 대신 IP 기반 인증을 허용합니다. Google Workspace 문서에 따르면, 릴레이는 알려진 IP 대역에서 전송하는 프린터, 스캐너, 내부 앱을 위한 것입니다.
가장 일반적인 구성은 포트 587과 STARTTLS 조합입니다. 많은 개발자가 sendmail 대체재로 사용하는 경량 SMTP 클라이언트 msmtp에서는 다음과 같이 설정합니다. 설정 파일은 ~/.msmtprc이며 작성에 2분 정도 걸립니다.
# ~/.msmtprc — Gmail SMTP via msmtp
account gmail
host smtp.gmail.com
port 587
tls on
tls_starttls on
auth on
user you@gmail.com
password abcd-efgh-ijkl-mnop
from you@gmail.com
logfile ~/.msmtp.log
account default : gmailSMTP용 Gmail 앱 비밀번호는 어떻게 만드나요?
Gmail 앱 비밀번호는 SMTP 연결 시 계정 비밀번호를 대신하는 16자리 코드입니다. 2단계 인증을 활성화하면 Google이 생성해 줍니다. 앱 비밀번호는 현재 개인 Gmail 계정에서 유일한 비밀번호 기반 SMTP 인증 방식입니다. Google은 2024년 9월 30일 "보안 수준이 낮은 앱(Less Secure Apps)" 액세스 비활성화를 시작했고, 같은 해 10월 롤아웃을 일시 중단한 뒤 2025년 5월 1일 차단을 완료했습니다 — 일반 Gmail 비밀번호로 SMTP에 연결하던 기존 방식은 사라졌습니다.
앱 비밀번호 생성에는 3분 정도 걸립니다. 먼저 2단계 인증이 켜져 있어야 하며, Google은 2021년부터 모든 신규 계정에 이를 요구합니다. 단계는 다음과 같습니다:
- myaccount.google.com/security로 이동해 2단계 인증이 켜져 있는지 확인합니다.
- myaccount.google.com/apppasswords에 접속합니다.
- 앱 이름(예: "SMTP script")을 입력하고 만들기를 클릭합니다.
- 16자리 비밀번호를 복사합니다. 한 번만 표시되며 나중에 다시 확인할 수 없습니다.
- 이 비밀번호를 클라이언트의 SMTP 비밀번호로 사용합니다. 사용자명은 전체 이메일 주소입니다.
Google의 앱 비밀번호 문서에 따르면, 앱 비밀번호는 "aren't recommended and are unnecessary in most cases"(권장되지 않으며 대부분의 경우 불필요)입니다. Google은 OAuth 2.0 로그인을 선호합니다. 또한 Google 계정 비밀번호를 변경하면 앱 비밀번호가 자동으로 취소되므로, 앱 비밀번호를 쓰는 SMTP 연동은 새 코드를 생성할 때까지 중단됩니다.
앱 비밀번호는 SMTP 프로토콜 테스트 도구인 swaks로 테스트할 수 있습니다. 이 명령은 Gmail SMTP 서버를 통해 메시지 하나를 보내면서 SMTP 핸드셰이크의 모든 단계를 보여주므로 인증 실패 지점을 쉽게 찾을 수 있습니다. 테스트는 5초 정도 걸립니다.
# Test Gmail SMTP auth with swaks
swaks --to recipient@example.com \
--from you@gmail.com \
--server smtp.gmail.com \
--port 587 \
--tls \
--auth LOGIN \
--auth-user you@gmail.com \
--auth-password "abcd-efgh-ijkl-mnop"
# Expected output (successful):
# -> AUTH LOGIN
# <- 235 2.7.0 Accepted
# -> MAIL FROM:<you@gmail.com>
# <- 250 2.1.0 OKGmail SMTP 전송 한도는 어떻게 되나요?
개인 Gmail 계정은 24시간 롤링 윈도 기준 500통까지 보낼 수 있습니다. Google Workspace 계정은 하루 2,000통입니다. 한도를 초과하면 Gmail이 임시 오류를 반환하고 최대 24시간 동안 발신을 중단합니다. 중단 기간에도 메일 수신은 정상 동작합니다. Workspace 평가판 계정은 누적 결제 금액이 100 USD에 도달할 때까지 하루 500통으로 제한됩니다.
| 한도 | 개인 Gmail | Google Workspace |
|---|---|---|
| 하루 메시지 수 | 500 | 2,000 |
| 메시지당 수신자 수 | 500 | 2,000 (외부 500) |
| 하루 수신자 수 | 500 | 10,000 |
| 하루 고유 외부 수신자 수 | 500 | 3,000 |
| 하루 메일 머지 | N/A | 1,500 |
| SMTP 메시지당 수신자 수 | 100 | 100 |
| 첨부 파일 크기 한도 | 25 MB | 25 MB |
SMTP 연결의 메시지당 수신자 100명 제한은 Gmail 웹 UI에서 허용되는 500명보다 낮습니다. Google의 Workspace 전송 한도 문서에 따르면, SMTP, POP, IMAP 사용자는 계정 유형과 관계없이 메시지당 수신자 100명으로 제한됩니다. 스크립트가 100개를 넘는 주소로 전송한다면 수신자를 배치로 나누세요.
Gmail 수신자에게 하루 5,000통 이상을 보내는 대량 발신자에게 Google은 발신 도메인의 SPF, DKIM, DMARC 인증과 원클릭 수신 거부 헤더를 요구합니다. 이 요구 사항은 2024년 2월부터 시행되었습니다. 할당량을 초과한 발신자에게는 SMTP 오류 코드 4.7.28이 표시됩니다 — 24시간 윈도가 초기화되면 해소되는 임시 거부입니다.
Gmail SMTP 인증은 왜 실패하나요?
Gmail SMTP 인증이 실패하는 일반적인 원인은 4가지입니다: 앱 비밀번호 누락, 잘못된 인증 정보, 비활성화된 2단계 인증, 과도한 동시 연결. Google은 각 경우에 대해 구체적인 SMTP 오류 코드를 반환합니다. 어디를 봐야 할지 알면 오류 메시지가 무엇이 잘못됐는지 정확히 알려줍니다. 가장 자주 마주치는 코드는 다음과 같습니다.
| 오류 코드 | 메시지 | 원인 | 해결 방법 |
|---|---|---|---|
534-5.7.9 | "Application-specific password required" | 계정에 2단계 인증은 있지만 앱 비밀번호가 없음 | myaccount.google.com/apppasswords에서 앱 비밀번호 생성 |
535-5.7.8 | "Username and Password not accepted" | 잘못된 비밀번호, 만료된 앱 비밀번호, 또는 계정 비밀번호가 변경됨 | 새 앱 비밀번호 생성 |
421-4.7.0 | "Too many concurrent SMTP connections" | 한 계정에서 10개를 초과하는 동시 SMTP 세션 | 연결 풀 크기 축소 또는 지수 백오프 추가 |
550-5.4.5 | "Daily sending quota exceeded" | 하루 500통(개인) 또는 2,000통(Workspace) 한도 도달 | 롤링 윈도가 초기화될 때까지 최대 24시간 대기 |
530-5.7.0 | "Must issue a STARTTLS command first" | STARTTLS 없이 포트 587에 연결 | 클라이언트에서 STARTTLS 활성화 또는 암시적 SSL의 포트 465로 전환 |
2026년 가장 흔한 오류는 534-5.7.9입니다. 개발자들이 일반 Gmail 비밀번호를 사용하는 오래된 튜토리얼의 SMTP 예제를 복사하기 때문입니다. 이런 예제는 Google이 보안 수준이 낮은 앱 액세스를 허용하던 동안에는 동작했지만, 해당 액세스는 2024년 9월 30일부터 차단이 시작되어 2025년 5월 1일 완전히 종료되었습니다. 이제 Gmail로의 모든 SMTP 연결에는 앱 비밀번호 또는 OAuth 2.0 토큰이 필요합니다.
SMTP 오류를 대화식으로 진단하려면 openssl로 raw TLS 연결을 엽니다. 상위 레벨 클라이언트가 원본 오류 코드를 감출 때 Google 서버의 정확한 SMTP 배너와 오류 응답을 확인할 수 있어 유용합니다. 이 명령은 암시적 TLS로 포트 465에 연결합니다.
# Open a raw TLS connection to Gmail SMTP
openssl s_client -connect smtp.gmail.com:465 -quiet
# You'll see the SMTP banner:
# 220 smtp.gmail.com ESMTP ... - gsmtp
# Authenticate manually:
EHLO localhost
AUTH LOGIN
# Enter base64-encoded username and password
# Google returns 235 on success or 535-5.7.8 on failureGmail SMTP는 폐기되나요?
Gmail SMTP 자체는 폐기되지 않습니다. smtp.gmail.com 서버는 2026년 5월 기준 여전히 포트 587과 465에서 연결을 수신합니다. 바뀐 것은 인증 방식입니다. Google은 지난 4년간 더 쉬운 인증 방식을 체계적으로 제거해 왔고, 이제 앱 비밀번호와 OAuth 2.0만 남았습니다. 방향은 명확합니다: OAuth가 의도된 경로입니다.
Google이 차단해 온 항목의 타임라인입니다:
| 날짜 | 변경 내용 |
|---|---|
| 2022년 5월 30일 | Google이 신규 앱의 보안 수준이 낮은 앱 액세스 활성화를 중단 |
| 2024년 6월 15일 | Workspace 관리 콘솔에서 보안 수준이 낮은 앱 토글 제거 |
| 2024년 9월 30일 | Google Workspace 계정의 보안 수준이 낮은 앱 액세스 차단 발표; 2024년 10월 롤아웃 일시 중단 |
| 2025년 5월 1일 | 최종 시행: 모든 Workspace 계정에서 보안 수준이 낮은 앱 지원 종료 |
앱 비밀번호는 지금도 사용할 수 있지만, Google 공식 문서조차 "not recommended"(권장되지 않음)라고 표현합니다. 위험도 따릅니다: 16자리 코드를 가진 사람은 누구나 계정의 전체 SMTP 액세스를 얻고, 앱 비밀번호를 특정 작업으로 범위 제한할 수도 없습니다. OAuth 2.0은 필요한 스코프만 요청할 수 있고(예: SMTP용 https://mail.google.com/) 토큰은 3,600초 후 만료됩니다. 새로 만드는 것이라면 OAuth를 사용하세요.
Workspace 관리자를 위해 Google의 2023년 9월 블로그 게시물은 마이그레이션 경로를 확정했습니다: 메일 액세스가 필요한 앱은 OAuth 또는 Gmail API를 사용해야 합니다. OAuth를 쓸 수 없는 프린터와 스캐너는 IP 기반 인증과 함께 smtp-relay.gmail.com 릴레이를 사용해야 합니다.
SMTP 설정 없이 이메일을 보내려면?
Nylas CLI는 SMTP 설정, 앱 비밀번호, OAuth 토큰 관리 없이 Nylas API를 통해 이메일을 보냅니다. 명령어 하나로 브라우저 기반 OAuth 인증을 마치면, 이후 전송은 3,600초마다 자동으로 갱신되는 저장된 인증 정보를 사용합니다. 설치부터 첫 이메일 전송까지 전체 설정에 2분이 걸리지 않습니다. Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP 프로바이더에서 동작합니다.
Homebrew로 CLI를 설치한 다음 가이드 설정을 실행합니다. nylas init 명령은 계정 생성, API 키 설정, 사서함 연결 과정을 안내합니다. 이미 Nylas API 키가 있다면 nylas auth config로 바로 건너뛸 수 있습니다. 다른 설치 방법(셸 스크립트, PowerShell, Go)은 시작하기 가이드를 참조하세요.
# Install Nylas CLI
brew install nylas/nylas-cli/nylas
# Guided setup (creates account, API key, connects mailbox)
nylas init
# Or, if you already have an API key
nylas auth config --api-key nyl_abc123
nylas auth login
# Send an email — no SMTP, no app password, no port config
nylas email send \
--to recipient@example.com \
--subject "Sent without SMTP" \
--body "No smtp.gmail.com, no port 587, no app password."
# Send non-interactively (for scripts and cron jobs)
nylas email send \
--to ops@company.com \
--subject "Deploy complete" \
--body "Build #1847 deployed at $(date)" \
--yes무인 실행 스크립트에서는 SMTP와 API 기반 전송의 차이가 큽니다. SMTP에서는 인증 정보(계정 비밀번호가 바뀌면 깨지는 앱 비밀번호), 연결 풀링(Gmail은 동시 SMTP 세션을 10개로 제한), TLS 협상을 직접 관리해야 합니다. CLI에서는 명령어 하나가 이 모든 것을 처리합니다. 이 도구는 OAuth 토큰을 시스템 키링에 저장하고 만료 전에 갱신합니다.
현재 Gmail SMTP 설정과 함께 smtplib를 사용하는 Python 스크립트라면, SMTP 블록을 subprocess 호출로 교체할 수 있습니다. 이렇게 하면 코드에서 SMTP 설정과 앱 비밀번호가 완전히 사라집니다. 전체 마이그레이션 패턴은 SMTP 없이 Python에서 이메일 보내기 가이드에서 다룹니다.
# Before: 15 lines of smtplib + Gmail SMTP config
import smtplib
from email.mime.text import MIMEText
msg = MIMEText("Hello from Python")
msg["Subject"] = "Test"
msg["From"] = "you@gmail.com"
msg["To"] = "recipient@example.com"
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login("you@gmail.com", "abcd-efgh-ijkl-mnop") # app password
server.send_message(msg)
# After: 1 subprocess call, no SMTP, no password in code
import subprocess
subprocess.run([
"nylas", "email", "send",
"--to", "recipient@example.com",
"--subject", "Test",
"--body", "Hello from Python",
"--yes"
], check=True)SMTP가 꼭 필요한 사용 사례(메일 서버 테스트, 프린터 연동, subprocess를 호출할 수 없는 레거시 앱)라면 이 페이지 상단의 설정이 필요한 전부입니다. 그 외의 경우라면 API를 통한 전송이 움직이는 부품을 없애줍니다: 기억할 포트도, 협상할 TLS도, 교체할 앱 비밀번호도 없습니다.
다음 단계
- Gmail 앱 비밀번호: 설정과 주의점 — 생성 방법, 또는 OAuth로 건너뛰기
- 이메일 API vs SMTP — SMTP로 충분한 경우와 그렇지 않은 경우
- 전체 명령어 레퍼런스 — 모든 Nylas CLI 플래그, 서브커맨드, 예제
- 터미널에서 이메일 보내기 — Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP의 상세 전송 워크플로
- SMTP 없이 Python에서 이메일 보내기 —
smtplib를 subprocess 호출 하나로 교체 - Python smtplib 래퍼: 직접 만들까, 건너뛸까 — SMTP를 유지하는 스크립트를 위한 연결, TLS, 재시도 패턴
- 시작하기 — macOS, Linux, Windows에 2분 안에 설치
- SPF, DKIM, DMARC: 이메일 전달성 디버깅 — 커맨드라인에서 인증 헤더와 반송 처리 진단
- 이메일 CLI 도구 비교 — Nylas CLI, Himalaya, msmtp, NeoMutt 외 3가지 도구 비교