Guide

SMTP 서버나 Postfix 없이 Linux 명령줄에서 이메일 보내기

대부분의 명령줄 이메일 도구는 Postfix나 sendmail 같은 로컬 SMTP 서버 또는 릴레이가 필요하거나 단일 제공업체만 지원합니다. Nylas CLI는 OAuth2 내장, JSON 출력, SMTP 서버 설정 없이 Linux, Ubuntu, macOS, Windows 터미널에서 이메일을 보낼 수 있습니다.

Written by Aaron de Mello Senior Engineering Manager

Reviewed by Caleb Geene

VerifiedCLI 3.1.1 · Gmail, Outlook, Yahoo · last tested April 11, 2026

Linux 명령줄에서 SMTP 서버 없이 이메일을 보내는 방법은?

로컬 메일 전송 에이전트 대신 인증된 이메일 API를 통해 전송하는 CLI를 사용하세요. Nylas CLI를 사용하면 Linux 워크플로는 설치 한 번, 인증 한 번, nylas email send 명령 한 번으로 끝납니다. Postfix 데몬도, sendmail 큐도, 셸 기록에 SMTP 비밀번호가 남는 일도 없습니다.

mail 명령은 1977년부터 Unix 시스템에 탑재되어 있고, mailx는 1980년대 초부터 존재하지만 둘 다 OAuth2를 지원하지 않습니다. 이것이 문제입니다: Google은 2024년 9월 Gmail의 "보안 수준이 낮은 앱" 비밀번호를 비활성화했고, Microsoft는 2022년 10월 Exchange Online의 기본 인증을 폐지했습니다. CLI 도구가 OAuth2 토큰 갱신을 처리하지 못하면(Google의 OAuth 2.0 문서에 따르면 Gmail 액세스 토큰은 3,600초마다 만료), 이러한 제공업체를 통해 안정적으로 이메일을 보낼 수 없습니다.

Nylas CLI는 이 모든 것을 우회합니다. Nylas API와 직접 통신하며, API가 OAuth2 토큰 갱신, 제공업체 추상화, 연결 관리를 처리합니다. 한 번 인증하면 72개 이상의 명령이 Gmail, Outlook, Exchange, Yahoo, iCloud, IMAP에서 플랫폼에 관계없이 작동합니다.

"SMTP 서버 없이 이메일 보내기"란?

SMTP 서버 없이 이메일을 보낸다는 것은 스크립트가 로컬 MTA, 릴레이 호스트, 또는 제공업체의 SMTP 포트(25, 465, 587)에 연결하지 않는다는 의미입니다. 대신 CLI가 인증된 API를 통해 포트 443의 HTTPS로 전송합니다. 이로써 Postfix 설정, 차단된 아웃바운드 SMTP 포트, 앱 비밀번호, 셸 스크립트 내 릴레이 자격 증명을 피할 수 있습니다.

이는 SMTP가 차단되었거나 유지 관리할 가치가 없는 Linux 서버, Ubuntu cron 작업, GitHub Actions 러너, AI 샌드박스에 적합합니다. 보고서, 알림, 테스트 메시지, 확인 이메일만 보내면 되는 워크플로라면 완전한 메일 서버 구성은 불필요한 운영 부담입니다.

Ubuntu 명령줄에서 이메일을 보내는 방법은?

Ubuntu 명령줄에서 이메일을 보내려면 CLI를 설치하고, 메일함을 한 번 인증한 후, bash, cron, systemd 타이머 또는 CI에서 nylas email send를 호출하세요. apt install postfix, mailutils, sendmail, SMTP 릴레이 설정이 필요 없습니다.

1. 설치

Nylas CLI 설치는 macOS, Linux, WSL에서 60초 이내에 완료됩니다. Homebrew가 가장 빠릅니다 — SHA-256 검증된 사전 빌드 바이너리를 다운로드하며 컴파일 단계가 없습니다. Go 옵션은 소스에서 빌드하며 Go 1.23 이상이 필요합니다. 두 방법 모두 nylas 바이너리를 자동으로 $PATH에 배치합니다.

# macOS / Linux (Homebrew)
brew install nylas/nylas-cli/nylas

# 또는 소스에서 빌드 (Go 1.23+ 필요)
go install github.com/nylas/cli/cmd/nylas@latest

2. 메일함 인증

인증은 60초 이내에 완료됩니다. dashboard-v3.nylas.com에서 애플리케이션을 만들고, OAuth로 메일함을 연결하고, API 키를 복사하세요. CLI는 시스템 키체인(macOS Keychain, GNOME Keyring, Windows Credential Manager)에 자격 증명을 암호화하여 저장합니다. 한 번 실행하면 72개 명령 모두 동일한 자격 증명을 사용합니다:

nylas auth config
# 프롬프트가 나타나면 API 키를 붙여넣으세요

# 연결 확인
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)

nylas auth config는 인증 정보를 시스템 키체인에 저장합니다. 연결은 언제든지 확인할 수 있습니다:

Authentication Status

Current Account:
  Email: dev@example.com
  Provider: google
  Grant ID: d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8
  Status: ✓ Valid

Configuration:
  Region: us
  Config Path: /home/dev/.config/nylas/config.yaml
  Secret Store: system keyring

3. 이메일 보내기

nylas email send 명령은 Nylas API를 통해 한 번의 호출로 메시지를 전달합니다. --to, --subject, --body를 필수 플래그로, --cc--bcc를 선택적으로 받습니다. CLI는 전송 전 확인을 요청하지만 --yes를 전달하면 건너뛸 수 있습니다 — 터미널이 연결되지 않은 스크립트 환경에서 유용합니다. 전달은 보통 25MB까지의 메시지에서 3초 이내에 완료됩니다.

nylas email send \
  --to "colleague@company.com" \
  --subject "분기 보고서 첨부" \
  --body "안녕하세요 -- 금요일까지 Q4 수치를 확인해 주세요."

# 확인 프롬프트 건너뛰기
nylas email send --to user@example.com --subject "간단한 메모" --body "..." --yes

# CC 및 BCC
nylas email send \
  --to alice@team.com \
  --cc bob@team.com \
  --bcc manager@team.com \
  --subject "스프린트 업데이트" \
  --body "모든 작업이 일정대로 진행 중입니다."

발송 성공 후 CLI가 전달을 확인합니다:

✓ Email sent successfully

  Message ID: abc123def456
  To: jamie@example.com
  Subject: Deployment complete
  Sent at: 2026-03-25T15:30:00-04:00

Linux, macOS, Windows 명령줄에서 이메일을 보낼 수 있나요?

네. CLI를 설치하고 인증하면 동일한 nylas email send 구문이 Linux, Ubuntu, macOS, Windows PowerShell, WSL, CI 러너에서 작동합니다. 명령줄에서 이메일 보내기 Mac이나 명령줄에서 이메일 보내기 Windows 같은 검색은 같은 워크플로의 플랫폼별 버전입니다: 바이너리 설치, 메일함 인증, SMTP 대신 HTTPS로 전송.

Linux 명령줄에서 첨부 파일과 함께 이메일을 보내야 한다면, 이 페이지의 전송 흐름을 사용하고 설치된 CLI 버전에서 지원하는 정확한 플래그는 nylas email send 명령 참조를 확인하세요. 중요한 운영상 차이점: 메시지는 여전히 프로바이더 API를 통해 전송되며, 로컬 Postfix나 SMTP 릴레이를 거치지 않습니다.

터미널에서 받은편지함 접근은 네 가지 작업을 포함합니다: 최근 메시지 목록 조회, 읽음 상태 필터링, 키워드 검색, 개별 메시지 본문 읽기. nylas email list 명령은 기본적으로 최근 50개 메시지를 반환합니다. --unread를 추가하면 읽지 않은 메시지만, --limit로 반환 수를 제어할 수 있습니다(요청당 최대 200개).

# 최근 이메일 목록 조회
nylas email list --limit 10

# 읽지 않은 메일만
nylas email list --unread

# 키워드로 검색
nylas email search "청구서" --limit 5

# 특정 메시지 읽기
nylas email read msg_abc123

# 원시 MIME 소스 보기
nylas email read msg_abc123 --mime

리스트 명령에 --json을 추가하면 RFC 8259 호환 JSON이 출력되며, jq로 필터링하거나 AI 에이전트에 직접 전달할 수 있습니다. 각 메시지 객체에는 12개 필드가 포함됩니다: id, grant_id, thread_id, subject, from, to, snippet, date, unread, starred, folders, object.

nylas email list --limit 1 --json
[
  {
    "id": "a1b2c3d4e5f6g7h8",
    "grant_id": "d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8",
    "thread_id": "a1b2c3d4e5f6g7h8",
    "subject": "Re: Project Atlas — Q2 출시 일정",
    "from": [{"name": "Sarah Chen", "email": "sarah@example.com"}],
    "to": [{"name": "Alex Rivera", "email": "alex@example.com"}],
    "snippet": "스테이징 환경이 준비되었습니다. 금요일 테스트 결과를 첨부합니다...",
    "date": "2026-03-25T14:22:18-04:00",
    "unread": true,
    "starred": false,
    "folders": ["INBOX"],
    "object": "message"
  }
]

5. 이메일 예약 발송

이메일 예약은 메시지를 서버 측에서 큐에 넣어 터미널을 열어두지 않고도 미래 시점에 발송합니다. --schedule 플래그는 2h30m 같은 상대적 오프셋, "tomorrow 9am" 같은 자연어 시간, ISO 8601 타임스탬프를 받습니다. 예약 메시지는 1분에서 30일까지의 지연을 지원하며, 배달 창 전에 초안을 삭제하여 예약 발송을 취소할 수 있습니다.

# 2시간 후 발송
nylas email send --to team@company.com --subject "리마인더" --body "..." --schedule 2h

# 내일 아침 발송
nylas email send --to team@company.com --subject "스탠드업" --body "..." --schedule "tomorrow 9am"

# 특정 날짜에 발송
nylas email send --to client@example.com --subject "후속 조치" --body "..." --schedule "2026-03-01 14:30"

6. 열람 및 클릭 추적

열람 및 클릭 추적은 1x1 추적 픽셀을 삽입하고 링크를 재작성하여 Nylas API가 참여 이벤트를 기록합니다. --track-opens 플래그로 픽셀 추적을 활성화하고, --track-links로 각 URL을 리다이렉트로 감싸며, --track-label로 필터링용 캠페인 태그를 지정합니다. 추적 이벤트는 수신자 작업 후 5초 이내에 발생하며 message.openedmessage.link_clicked 트리거의 웹훅 페이로드로 도착합니다.

nylas email send \
  --to prospect@company.com \
  --subject "제안서 첨부" \
  --body "Q2 제안서를 보내드립니다." \
  --track-opens \
  --track-links \
  --track-label "q2-영업"

# 추적 이벤트는 웹훅으로 전달됩니다:
nylas webhook create \
  --url https://your-server.com/hooks \
  --triggers message.opened,message.link_clicked

7. GPG 서명 및 암호화

GPG 서명과 암호화는 네이티브로 작동합니다 — GPG 키링 외에 추가 도구가 필요 없습니다. CLI는 RFC 3156 PGP/MIME를 구현하며, 서명에 메시지당 약 200밀리초, 암호화에 약 400밀리초의 오버헤드가 추가됩니다. 수신자에게 처음 암호화할 때 공개 키는 키서버에서 자동으로 가져옵니다:

# GPG 키로 서명
nylas email send --to legal@partner.com --subject "계약서" --body "..." --sign

# 수신자의 공개 키로 암호화 (키서버에서 자동 가져오기)
nylas email send --to legal@partner.com --subject "계약서" --body "..." --encrypt

# 둘 다 (최대 보안을 위해 권장)
nylas email send --to legal@partner.com --subject "계약서" --body "..." --sign --encrypt

# 수신한 메시지 복호화 및 검증
nylas email read msg_xyz789 --decrypt --verify

키 관리, 문제 해결, 다중 수신자 암호화에 대해서는 GPG 암호화 이메일 가이드를 참조하세요.

8. AI 스마트 작성

스마트 작성은 터미널을 떠나지 않고 자연어 프롬프트에서 이메일 초안을 생성합니다. nylas email smart-compose 명령은 프롬프트를 Nylas AI 엔드포인트로 보내고 2초 이내에 포맷된 초안을 반환합니다. --message-id를 전달하면 특정 스레드에 대한 맥락 인식 답장을 생성합니다. ai analyze 서브명령은 읽지 않은 메시지를 스캔하고 요약, 카테고리, 긴급도를 반환합니다.

# 프롬프트에서 초안 생성
nylas email smart-compose --prompt "회의에 감사드리며 다음 단계를 확인해 주세요"

# 특정 메시지에 대한 답장 생성
nylas email smart-compose --message-id msg_abc123 --prompt "초대를 정중히 수락"

# AI 받은편지함 분석
nylas email ai analyze --unread
# => 요약, 카테고리, 액션 아이템, 긴급도

9. 스크립팅 및 자동화

Nylas CLI로 셸 스크립팅을 하면 이메일 작업을 조합 가능한 빌딩 블록으로 만들 수 있습니다. 모든 서브명령은 --json을 지원하여 jq, awk 또는 다른 처리 도구로 파이프할 수 있는 구조화된 데이터를 출력합니다. 아래 예시는 읽지 않은 메시지를 세고, 제목 키워드로 긴급 메시지를 표시하며, CSV 파일에서 개인화된 이메일을 대량 발송하는 아침 받은편지함 요약 스크립트를 보여줍니다. CSV 발송 사이 2초 sleep으로 기본 속도 제한(분당 50건)에 도달하는 것을 방지합니다.

# 아침 받은편지함 요약 스크립트
#!/bin/bash
echo "=== 받은편지함 요약 ==="
unread=$(nylas email list --unread --json | jq length)
echo "읽지 않음: $unread"

# 긴급 확인
nylas email list --unread --json \
  | jq '[.[] | select(.subject | test("긴급|urgent|asap"; "i"))]' \
  | jq 'length' \
  | xargs -I{} echo "긴급: {}"

# CSV에서 대량 발송
while IFS=, read -r email name; do
  nylas email send \
    --to "$email" \
    --subject "$name님 안녕하세요" \
    --body "계정이 준비되었습니다." \
    --yes
  sleep 2
done < contacts.csv

10. AI 에이전트로 전달

CLI 출력을 AI 에이전트로 파이프하면 터미널이 이메일 자동화 레이어가 됩니다. 모든 nylas email 서브명령은 --json을 지원하여 에이전트가 변환 없이 파싱할 수 있는 RFC 8259 호환 JSON을 출력합니다. 받은편지함 데이터를 분류 에이전트에 전달하거나, LLM으로 답장을 생성하거나, 내장 MCP 서버를 설치하여 Claude Code와 Cursor 같은 도구가 CLI 명령을 직접 호출할 수 있습니다.

# 에이전트가 받은편지함을 분류
nylas email list --unread --json | agent triage --rules ./inbox-rules.yml

# 에이전트가 답장 초안 작성, CLI가 발송
nylas email send \
  --to sarah@team.io \
  --subject "Re: 후속 조치" \
  --body "$(agent draft --context msg_a1f2)" \
  --yes

# 내장 MCP 서버 시작 (Claude, Cursor, VS Code용)
nylas mcp install --assistant claude-code

Model Context Protocol (MCP)은 AI 어시스턴트가 CLI 도구를 직접 호출할 수 있게 합니다. MCP 설정 및 도구 구성에 대해서는 AI 에이전트 이메일 액세스 가이드를 참조하세요.

11. Cron 작업, Here-Doc, 셸 네이티브 자동화

cron 기반 이메일 자동화는 데몬이나 GUI 없이 예약된 알림, 보고서, 상태 점검을 발송할 수 있습니다. Bash here-doc은 여러 줄 본문 문제를 해결합니다 — cat <<'EOF'는 따옴표나 줄바꿈을 이스케이프하지 않고 임의의 텍스트를 --body에 전달합니다. CLI는 성공 시 코드 0, 실패 시 0이 아닌 코드로 종료하므로, 발송을 if ! 블록으로 감싸면 cron 작업에 신뢰할 수 있는 오류 처리를 제공합니다. 일반적인 야간 보고서 cron 항목은 crontab에 약 4줄만 추가하면 됩니다.

# 셸 스크립트에서 here-doc으로 긴 이메일 본문 처리
nylas email send \
  --to ops@company.com \
  --subject "야간 백업 보고서" \
  --body "$(cat <<'EOF'
백업이 성공적으로 완료되었습니다.

- 클러스터: prod-a
- 소요 시간: 18m
- 스냅샷 경과: 24h
EOF
)" \
  --yes

cron 작업에서 발송을 if ! 블록으로 감싸면 오류가 조용히 사라지는 대신 표면화됩니다. CLI는 인증 오류, 네트워크 타임아웃, API 수준 거부에서 종료 코드 1을 반환합니다.

# cron 호환 명시적 오류 처리
if ! nylas email send --to alerts@company.com --subject "디스크 경고" --body "디스크 사용률 > 90%" --yes; then
  echo "이메일 발송 실패" >&2
  exit 1
fi

12. mailx, sendmail, Postfix 대체

mailx, sendmail 또는 Postfix를 Nylas CLI로 대체하면 로컬 MTA 스택을 완전히 제거할 수 있습니다. Postfix 릴레이에는 TLS 인증서 유지, 메일 큐 관리, 장기 실행 데몬 모니터링이 필요합니다 — 프로덕션 설정에서 /etc/postfix/에 약 15-20개의 설정 파일이 필요합니다. mailx 명령은 그 아래에서 작동하는 MTA에 의존하며, sendmail의 설정 구문(sendmail.cf)은 1990년대 이후 크게 변하지 않았습니다. CLI는 이 모든 것을 하나의 바이너리와 API 키로 대체합니다.

스크립트가 현재 mailx -s "제목" user@example.com으로 텍스트를 파이프하고 있다면, 마이그레이션은 간단합니다: mailxnylas email send --to user@example.com --subject "제목" --body "$(cat)"으로 교체하세요. 릴레이 없음, 큐 없음, 설정 변경 후 데몬 재시작 불필요.


Nylas CLI와 다른 CLI 이메일 도구 비교

기능mail / mailxmuttNylas CLI
이메일 전송가능(MTA 필요)가능(SMTP 필요)가능(명령 하나)
받은편지함 읽기로컬만가능가능
Gmail OAuth2불가복잡내장
Microsoft 365불가복잡내장
GPG 서명/암호화수동내장내장
캘린더 접근불가불가가능
JSON 출력불가불가가능 (--json)
AI 작성불가불가가능
MCP 서버불가불가내장

다음 단계