メール — 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が必要です。このゲートウェイアダプタは、よりシンプルで自己完結型の方法です。
始める前に
必要なものは3つです:
- エージェント専用のメールアカウント(個人の受信トレイは使わないでください)
- そのアカウントでIMAPが有効になっていること
- Gmailや二段階認証を採用しているプロバイダーを使用する場合はアプリパスワード
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 # cronジョブのデフォルト配信先
ステップ2: ゲートウェイの起動
hermes gateway # フォアグラウンドで実行
hermes gateway install # ユーザーサービスとしてインストール
sudo hermes gateway install --system # Linux: 起動時のシステムサービス
起動時に、アダプタはIMAPとSMTPの両方の接続をテストし、既存の受信トレイのメッセージをすべて「既読」にマークして(新着メールのみを処理するため)、ポーリングを開始します。
動作の仕組み
メッセージの受信。 アダプタはデフォルトで15秒ごとに未読メールをチェックします。各新着メッセージについて:
- 件名がコンテキストとして含まれます(例:
[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接続に失敗しました」** | EMAIL_IMAP_HOSTとEMAIL_IMAP_PORTを確認してください。アカウントでIMAPが有効になっていることを確認してください(Gmail: 設定 → 転送とPOP/IMAP) |
まとめ
Emailゲートウェイアダプタは、標準のメールボックスをAIエージェントのコミュニケーションチャネルに変えます。外部依存関係も、特別なクライアントも不要 — IMAP、SMTP、そして少しの設定だけです。専用アカウントを設定し、許可送信者をロックダウンして、メールの流れに任せましょう。
楽しいメールライフを!📧
📖 公式ドキュメント
この記事は Hermes Agent の公式ドキュメントに基づいています:公式ドキュメント › user-guide/messaging/email