Guide
Outlook SMTP 설정: 서버, 포트, TLS
개발자를 위한 완전한 Outlook SMTP 레퍼런스: smtp.office365.com 설정, STARTTLS를 사용하는 포트 587, Microsoft가 2022년 10월 Basic Auth를 제거한 이후의 Modern Auth(OAuth 2.0) 요건, Microsoft 365 및 Outlook.com 전송 제한, 일반적인 SMTP 오류 코드, 그리고 설정이 필요 없는 대안까지 다룹니다.
Written by Nick Barraclough Product Manager
이 가이드에서 사용하는 명령어 레퍼런스: SMTP 없이 전송하는 nylas email send, OAuth 인증을 위한 nylas auth login, 이메일 읽기를 위한 nylas email list.
Outlook SMTP 서버 설정 값은 무엇인가요?
Outlook의 SMTP 서버는 smtp.office365.com입니다. Microsoft가 클라이언트 제출용 포트 25를 폐기했고 Exchange Online에서는 포트 465보다 포트 587 + STARTTLS를 권장하므로, STARTTLS를 사용하는 포트 587이 유일하게 지원되는 구성입니다. 인증에는 OAuth 2.0 Modern Auth를 사용해야 합니다. 아래 표는 모든 SMTP 클라이언트나 라이브러리를 구성할 때 쓸 수 있는 전체 빠른 참조표입니다.
| 항목 | 값 |
|---|---|
| SMTP 서버 | smtp.office365.com |
| 포트 | 587 |
| 암호화 | STARTTLS (필수) |
| 인증 | OAuth 2.0 (Modern Auth) |
| 사용자명 | 전체 이메일 주소 (user@domain.com) |
| IMAP 서버 | outlook.office365.com (포트 993, TLS) |
| POP3 서버 | outlook.office365.com (포트 995, TLS) |
IMAP과 POP3 서버는 SMTP 서버와 다른 호스트명(outlook.office365.com)을 사용합니다. 둘이 같다고 가정하는 개발자가 많아 자주 걸리는 함정입니다. Microsoft의 Exchange Online 문서에 따르면, SMTP AUTH는 테넌트 관리자가 사서함별로 명시적으로 활성화해야 합니다. 신규 Microsoft 365 테넌트에서는 기본적으로 비활성화되어 있습니다.
Microsoft의 Basic Auth 종료는 SMTP 액세스를 어떻게 바꿨나요?
Microsoft는 2022년 10월 1일 Exchange Online 프로토콜에서 Basic Authentication을 영구적으로 비활성화했습니다. 그 전에는 SMTP 클라이언트가 사용자명과 비밀번호를 평문(AUTH LOGIN 또는 AUTH PLAIN을 통한 base64 인코딩)으로 보낼 수 있었습니다. 종료 이후 모든 SMTP 연결은 XOAUTH2 SASL 메커니즘을 사용해 OAuth 2.0 액세스 토큰으로 인증해야 합니다. 이 변경으로 수천 개의 스크립트, 프린터, 사내 업무용 앱이 하룻밤 사이에 멈췄습니다.
Modern Auth로 SMTP 이메일을 보내려면 SMTP.Send 위임 권한이 있는 Azure AD 앱 등록이 필요합니다. 토큰 요청은 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token으로 보내며 scope=https://outlook.office365.com/.default를 사용합니다. 액세스 토큰은 3,600초(1시간) 후 만료되므로 프로덕션 코드에는 리프레시 토큰 루프가 필요합니다. 아래 예시는 STARTTLS로 업그레이드한 후의 SMTP EHLO 핸드셰이크를 보여줍니다.
# SMTP Modern Auth 핸드셰이크 (개념 예시)
EHLO client.example.com
STARTTLS
EHLO client.example.com
AUTH XOAUTH2 <base64-encoded-oauth2-token>
# base64 토큰 형식:
# user=user@contoso.com^Aauth=Bearer <access_token>^A^A
# ^A는 ASCII SOH 문자(0x01)입니다XOAUTH2 토큰 형식은 표준 Bearer 헤더와 다릅니다. user=와 auth=Bearer 필드는 SOH(0x01) 문자로 구분되며, 그 전체 문자열을 base64로 인코딩합니다. 이 인코딩을 잘못 처리하는 것이 535 5.7.3 Authentication unsuccessful 오류의 1순위 원인입니다. Microsoft의 XOAUTH2 문서에는 이 문자열을 올바르게 구성하는 Python 샘플이 포함되어 있습니다.
자주 발생하는 Outlook SMTP 오류와 해결 방법은?
Outlook SMTP는 Microsoft 고유의 확장 상태 코드와 함께 RFC 5321 오류 코드를 반환합니다. 5.7.x 계열은 인증 및 권한 부여 실패를 다루며, Basic Auth 종료 이후 가장 흔하게 발생합니다. 아래 표는 Microsoft의 NDR 레퍼런스에서 가져온 8가지 일반적인 오류입니다.
| 오류 코드 | 의미 | 해결 방법 |
|---|---|---|
| 535 5.7.3 | 인증 실패 | OAuth 2.0 Modern Auth로 전환하세요. Basic Auth는 영구적으로 비활성화되었습니다 |
| 550 5.7.501 | 사서함의 SMTP AUTH 비활성화 | 관리자가 Set-CASMailbox -SmtpClientAuthenticationDisabled $false로 SMTP AUTH를 활성화해야 합니다 |
| 550 5.1.1 | 수신자를 찾을 수 없음 | 대상 도메인에 수신자 주소가 존재하는지 확인하세요 |
| 421 4.7.0 | 연결 스로틀링 | 60초 후 다시 시도하고 전송 속도를 낮추세요 |
| 550 5.7.708 | 테넌트의 아웃바운드 이메일 차단 | 관리자가 Security & Compliance Center에서 차단을 해제해야 합니다 |
| 554 5.2.0 | 메시지가 너무 큼 | 메시지 크기를 25 MB 미만으로 줄이세요 (base64 오버헤드 포함 35 MB = 디코딩 후 약 25 MB) |
| 452 4.5.3 | 수신자가 너무 많음 | 테넌트별 수신자 상한(기본값은 다양, 최대 1,000명)을 지키세요 |
| 550 5.7.520 | 스팸으로 감지됨 | SPF, DKIM, DMARC 레코드를 확인하고 대량 전송 속도를 낮추세요 |
535 5.7.3 오류가 압도적으로 흔하며, 2022년 10월 이후 지원 티켓의 대부분을 차지합니다. 이 오류가 보인다면 코드가 여전히 평문 사용자명과 비밀번호를 보내고 있다는 뜻입니다. 해결 방법은 Azure AD 앱을 등록하고 OAuth 2.0 토큰을 획득한 다음, 이전 섹션에서 설명한 XOAUTH2 메커니즘을 사용하는 것입니다.
Microsoft 365의 전송 제한은 어떻게 되나요?
Microsoft 365는 SMTP AUTH 제출에 사서함별·테넌트별 속도 제한을 적용합니다. 제한 값은 Microsoft 365 Business 플랜과 무료 Outlook.com 계정 간에 다릅니다. 어떤 제한이든 초과하면 421 4.7.0 스로틀 응답이나 550 거부가 발생합니다. 아래 표는 Microsoft의 Exchange Online 제한 문서 기준 현재 제한입니다.
| 제한 | Microsoft 365 | Outlook.com |
|---|---|---|
| 하루 수신자 수 | 10,000 | 구독에 따라 다름 |
| 메시지당 수신자 수 | 최대 1,000 (관리자 설정 가능) | 100 |
| 분당 메시지 수 | 30 | 30 |
| 최대 메시지 크기 | 25 MB | 25 MB |
| 최대 첨부 파일 수 | 250 | 250 |
분당 30개 메시지 제한은 자동 알림 시스템을 만드는 개발자가 자주 놀라는 부분입니다. 이는 테넌트별이 아니라 사서함별 상한이므로, 여러 사서함에 전송을 분산하면 우회할 수 있습니다. 대량 트랜잭션 이메일의 경우 Microsoft는 SMTP AUTH 대신 Azure Communication Services 리소스나 서드파티 ESP 사용을 권장합니다.
Outlook SMTP를 아예 건너뛰어야 하는 경우는?
smtp.office365.com을 통한 SMTP AUTH에는 Azure AD 앱 등록, OAuth 2.0 토큰 관리, XOAUTH2 인코딩, 사서함별 관리자 활성화가 필요합니다. Outlook 계정에서 이메일을 보내는 스크립트, CI/CD 파이프라인, 개발자 도구를 만들고 있다면 그 전부를 건너뛸 수 있습니다. CLI는 브라우저에서 OAuth로 인증하고 토큰을 캐시하며 갱신을 자동으로 처리합니다.
아래 예시는 명령어 2개로 Outlook 계정에서 이메일을 보냅니다. 첫 번째 명령은 인증하고 인증 정보를 로컬에 저장합니다. 두 번째 명령은 SMTP가 아닌 HTTPS로 메시지를 전송합니다. 포트 587도, STARTTLS 핸드셰이크도, XOAUTH2 토큰 인코딩도, 관리자 활성화 단계도 없습니다.
# 설치 (macOS 또는 Linux)
brew install nylas/nylas-cli/nylas
# Outlook 계정 인증
nylas auth login --provider microsoft
# 이메일 전송
nylas email send \
--to recipient@example.com \
--subject "Quarterly report" \
--body "See the attached spreadsheet."
# 최근 이메일 목록으로 전송 확인
nylas email list --limit 5동일한 명령어가 Gmail, Yahoo, iCloud, Exchange, IMAP 계정에서도 작동합니다. 원시 SMTP가 필요한 레거시 시스템 때문에 Outlook 고유의 SMTP 설정이 필요하다면 이 페이지 상단의 빠른 참조표를 사용하세요. 그 외의 모든 경우에는 SMTP를 건너뛰는 것이 Microsoft의 Basic Auth 종료가 불러온 인증 복잡성을 없애는 방법입니다.
다음 단계
- PHP에서 이메일 보내기: mail(), PHPMailer, CLI — PHP에서 이메일을 보내는 세 가지 방법
- Gmail SMTP 설정 — 이 레퍼런스의 Gmail 버전으로, 포트 587/465와 앱 비밀번호 설정을 다룹니다
- 터미널에서 Outlook 이메일 보내기 — Graph API나 SMTP 없이 Outlook 이메일 전송
- PowerShell에서 Office 365 이메일 — PowerShell 스크립트로 O365 이메일 관리
- EWS에서 Graph로 마이그레이션 — 2026년 10월 종료 전에 Exchange Web Services에서 마이그레이션
- 전체 명령어 레퍼런스 — 모든 플래그와 서브커맨드 문서