이메일 — AI가 메일을 보내고 받습니다
Email — AI Sends and Receives Mail — easy-to-understand guide based on official docs
이메일 — AI가 메일을 보내고 받습니다
이런 상황을 상상해 보세요: AI 에이전트에게 이메일을 보내면, 같은 스레드에서 답장이 옵니다. 화려한 채팅 앱도, 봇 API도, 추가 소프트웨어도 필요 없어요. 그냥 평범한 이메일만 있으면 됩니다. 바로 이것이 Hermes의 Email 게이트웨이 어댑터가 하는 일입니다.
이 글에서는 설정 방법, 내부 동작 원리, 그리고 받은 편지함을 안전하게 유지하는 방법까지 차근차근 살펴보겠습니다.
왜 이메일인가?
이메일은 보편적입니다. 누구나 주소를 가지고 있죠. 표준 IMAP(수신)과 SMTP(발신)을 통해 Hermes를 사서함에 연결하면, Gmail, Outlook, Yahoo, Fastmail 등 이 프로토콜을 지원하는 어떤 제공업체에서도 작동하는 대화형 AI를 얻을 수 있습니다.
그리고 가장 좋은 점: 외부 의존성이 전혀 없습니다. 이 어댑터는 Python 내장 모듈인 imaplib, smtplib, email만 사용합니다. 추가 패키지도, 서드파티 서비스도 필요 없어요.
참고: 이 기능은 번들로 제공되는 Himalaya 이메일 스킬과는 다릅니다. Himalaya 스킬은 터미널 명령을 통해 에이전트가 사서함을 관리하게 하는 방식이고, 외부
himalayaCLI가 필요합니다. 이 게이트웨이 어댑터는 더 간단하고 자체적으로 완결된 방식입니다.
시작하기 전에
세 가지가 필요합니다:
- 에이전트 전용 이메일 계정 (개인 사서함은 사용하지 마세요)
- 해당 계정에서 IMAP 활성화
- Gmail 또는 2단계 인증을 사용하는 제공업체라면 앱 비밀번호
Gmail의 경우: 2FA를 활성화한 다음 myaccount.google.com/apppasswords에서 앱 비밀번호를 생성하세요. 16자리 비밀번호가 발급되는데, 일반 비밀번호 대신 이걸 사용하면 됩니다.
Outlook/Microsoft 365의 경우: 2FA를 활성화하고 “추가 보안 옵션”에서 앱 비밀번호를 만든 다음, IMAP에는 outlook.office365.com, SMTP에는 smtp.office365.com을 사용하세요.
다른 제공업체의 경우 IMAP/SMTP 호스트와 포트를 문서에서 확인하세요 (보통 IMAP SSL은 993, SMTP STARTTLS는 587).
1단계: Hermes 설정
가장 쉬운 방법은 설정 마법사를 이용하는 것입니다:
hermes gateway setup
메뉴에서 Email을 선택하고 안내를 따르세요. 주소, 앱 비밀번호, IMAP/SMTP 호스트, 허용 발신자를 묻습니다.
수동 설정을 선호하시나요? ~/.hermes/.env에 다음을 추가하세요:
# 필수
EMAIL_ADDRESS=hermes@gmail.com
EMAIL_PASSWORD=abcd efgh ijkl mnop # 앱 비밀번호 (일반 비밀번호 아님)
EMAIL_IMAP_HOST=imap.gmail.com
EMAIL_SMTP_HOST=smtp.gmail.com
# 보안 (권장)
EMAIL_ALLOWED_USERS=your@email.com,colleague@work.com
# 선택 사항
EMAIL_IMAP_PORT=993 # 기본값: 993
EMAIL_SMTP_PORT=587 # 기본값: 587
EMAIL_POLL_INTERVAL=15 # 받은 편지함 확인 간격(초)
EMAIL_HOME_ADDRESS=your@email.com # 크론 작업의 기본 전달 대상
2단계: 게이트웨이 시작
hermes gateway # 포그라운드에서 실행
hermes gateway install # 사용자 서비스로 설치
sudo hermes gateway install --system # Linux: 부팅 시 시스템 서비스로 실행
시작 시 어댑터는 IMAP과 SMTP 연결을 모두 테스트하고, 기존 받은 편지함 메시지를 모두 “읽음”으로 표시한 다음(새 이메일만 처리하도록), 폴링을 시작합니다.
동작 방식
메시지 수신. 어댑터는 기본적으로 15초마다 UNSEEN 이메일을 확인합니다. 각 새 메시지에 대해:
- 제목 줄이 컨텍스트로 포함됩니다 (예:
[Subject: Deploy to production]) - 답장(제목이
Re:로 시작하는 경우)은 제목 접두사를 생략합니다 — 스레드 컨텍스트가 이미 있기 때문입니다 - 첨부 파일은 로컬에 캐시됩니다: 이미지는 비전 도구에서 사용할 수 있고, PDF나 ZIP 같은 문서는 파일 접근에 사용됩니다
- HTML 전용 이메일은 태그를 제거하여 일반 텍스트로 추출합니다
- 자기 자신이 보낸 메시지는 답장 루프를 방지하기 위해 필터링됩니다
- 자동 발신자는 조용히 무시됩니다 —
noreply@,mailer-daemon@,bounce@, 그리고Auto-Submitted,Precedence: bulk,List-Unsubscribe헤더가 있는 이메일은 제외됩니다
답장 보내기. 답장은 SMTP를 통해 적절한 스레딩과 함께 발송됩니다: In-Reply-To와 References 헤더가 대화를 하나로 유지하고, 제목에는 Re: 접두사가 유지되며(이중 Re: Re: 없음), 응답은 일반 UTF-8 텍스트로 전송됩니다.
파일 첨부. 에이전트가 파일을 보내도록 하시겠어요? 응답에 MEDIA:/path/to/file을 포함하면 자동으로 첨부됩니다.
첨부 파일 건너뛰기. 맬웨어나 대역폭이 걱정되시나요? config.yaml에 다음을 추가하세요:
platforms:
email:
skip_attachments: true
이메일 본문 텍스트는 정상적으로 처리되며, 첨부 파일만 무시됩니다.
접근 제어: 기본적으로 엄격하게
이메일은 설계상 채팅 플랫폼보다 더 엄격하게 잠겨 있습니다:
EMAIL_ALLOWED_USERS설정 → 해당 주소에서 온 이메일만 처리됩니다- 허용 목록 미설정 → 알 수 없는 발신자는 조용히 무시됩니다
EMAIL_ALLOW_ALL_USERS=true→ 모든 발신자가 허용됩니다 (주의해서 사용하세요!)platforms.email.unauthorized_dm_behavior: pair→ 알 수 없는 발신자에게 페어링 코드가 전송됩니다
핵심 원칙: 전용 받은 편지함을 사용하고 항상 EMAIL_ALLOWED_USERS를 설정하세요. 이메일 페어링은 옵트인 방식인데, 공유 받은 편지함에는 관련 없는 읽지 않은 메시지가 자주 포함되기 때문입니다 — Hermes가 기본적으로 그런 연락처에 답장해서는 안 됩니다.
문제 해결
| 문제 | 해결 방법 |
|---|---|
| 시작 시 “IMAP connection failed” | EMAIL_IMAP_HOST와 EMAIL_IMAP_PORT를 확인하세요. 계정에서 IMAP이 활성화되어 있는지 확인하세요 (Gmail: 설정 → 전달 및 POP/IMAP) |
마무리
Email 게이트웨이 어댑터는 모든 표준 사서함을 AI 에이전트의 통신 채널로 바꿔줍니다. 외부 의존성도, 특별한 클라이언트도 필요 없습니다 — 그냥 IMAP, SMTP, 약간의 설정만 있으면 됩니다. 전용 계정을 만들고, 허용 발신자를 잠그고, 이메일이 흐르게 하세요.
즐거운 이메일 보내세요! 📧
📖 공식 문서
この記事は Hermes Agent の공식 문서に基づいています:공식 문서 › user-guide/messaging/email