imap-smtp-email について
imap-smtp-emailは、IMAPでメールを管理し、SMTPで送信するコマンドラインスキルです。ターミナルやスクリプトでメールを扱うユーザー向けで、複数アカウントの設定や検索、添付ファイル、既読状態の管理に対応します。
主な機能
- 01IMAPメールの確認・検索・取得
- 02SMTPによるメール送信
- 03メールボックスと既読状態の管理
- 04メール添付ファイルのダウンロード
- 05複数アカウントの設定と切り替え
活用シーン
- 01未読メールの確認と最近のメールの絞り込み
- 02メール検索と本文の取得
- 03CCや添付ファイル付きメールの送信
- 04複数のメールアカウントの切り替え
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gzlicanyi/ mail-skills --skill imap-smtp-emailインストール後、Claude Code で/imap-smtp-emailを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
package-lock.jsonpackage.jsonsetup.shscripts/config.jsimap.jsmigrate-legacy-config.jsproviders.jssearch-filter.jssmtp.js詳細
IMAP/SMTP メールツール
IMAP プロトコルでメールを読み取り、検索、管理します。SMTP でメールを送信します。Gmail、Outlook、163.com、vip.163.com、126.com、vip.126.com、188.com、vip.188.com、および標準的な IMAP/SMTP サーバーに対応しています。
設定
セットアップスクリプトを実行して、依存関係をインストールし、メールアカウントを設定します。
bash setup.sh
setup.sh を使わずにコマンドを手動で実行する場合は、先に依存関係をインストールしてください。
npm install --production
設定は ~/.config/mail-skills/.env に保存されます(caldav-sync スキルと共有され、スキルの更新後も保持されます)。共有設定が見つからない場合は、~/.config/imap-smtp-email/.env(旧形式)、次にスキルディレクトリ内の .env ファイルを確認します。
設定ファイルの形式(共有)
# Default account
PROVIDER=163
[email protected]
PASSWORD=your_password
# File access whitelist (security)
ALLOWED_READ_DIRS=~/Downloads,~/Documents
ALLOWED_WRITE_DIRS=~/Downloads
PROVIDER プリセットを使うと、IMAP/SMTP サーバーの設定が自動入力されます。カスタムサーバーを使用する場合:
PROVIDER=custom
[email protected]
PASSWORD=your_password
IMAP_HOST=imap.example.com
SMTP_HOST=smtp.example.com
旧形式の設定ファイル
既存の ~/.config/imap-smtp-email/.env がある場合は、共有設定よりも優先されます。形式は次のとおりです。
# Default account (no prefix)
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
[email protected]
IMAP_PASS=your_password
IMAP_TLS=true
IMAP_REJECT_UNAUTHORIZED=true
IMAP_MAILBOX=INBOX
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
[email protected]
SMTP_PASS=your_password
[email protected]
SMTP_REJECT_UNAUTHORIZED=true
# File access whitelist (security)
ALLOWED_READ_DIRS=~/Downloads,~/Documents
ALLOWED_WRITE_DIRS=~/Downloads
bash setup.sh を実行して、旧形式の設定を共有形式に移行します。
複数アカウント
同じ設定ファイルで、メールアカウントを追加設定できます。各アカウントのすべての変数には、大文字の名前プレフィックスが付きます。
アカウントの追加
セットアップスクリプトを実行し、「Add a new account」を選択します。
bash setup.sh
または、~/.config/mail-skills/.env にプレフィックス付きの変数を手動で追加します。
# Work account (WORK_ prefix)
WORK_PROVIDER=gmail
[email protected]
WORK_PASSWORD=app_password
名前を指定したアカウントの使用
コマンドの前に --account <name> を追加します。
node scripts/imap.js --account work check
node scripts/smtp.js --account work send --to [email protected] --subject Hi --body Hello
--account を指定しない場合は、デフォルト(プレフィックスなし)のアカウントが使用されます。
アカウント名のルール
- 使用できるのは英字と数字のみです(例:
work、163、personal2)。 - 大文字と小文字は区別されません。
workとWORKは同じアカウントを指します。 .env内のプレフィックスは常に大文字です(例:WORK_PROVIDER)。ALLOWED_READ_DIRSとALLOWED_WRITE_DIRSはすべてのアカウントで共有されます(常にプレフィックスなし)。
一般的なメールサーバー
| プロバイダー | IMAP ホスト | IMAP ポート | SMTP ホスト | SMTP ポート |
|---|---|---|---|---|
| 163.com | imap.163.com | 993 | smtp.163.com | 465 |
| vip.163.com | imap.vip.163.com | 993 | smtp.vip.163.com | 465 |
| 126.com | imap.126.com | 993 | smtp.126.com | 465 |
| vip.126.com | imap.vip.126.com | 993 | smtp.vip.126.com | 465 |
| 188.com | imap.188.com | 993 | smtp.188.com | 465 |
| vip.188.com | imap.vip.188.com | 993 | smtp.vip.188.com | 465 |
| yeah.net | imap.yeah.net | 993 | smtp.yeah.net | 465 |
| Gmail | imap.gmail.com | 993 | smtp.gmail.com | 587 |
| Outlook | outlook.office365.com | 993 | smtp.office365.com | 587 |
| QQ Mail | imap.qq.com | 993 | smtp.qq.com | 587 |
| exmail.qq.com | imap.exmail.qq.com | 993 | smtp.exmail.qq.com | 465 |
Gmail に関する重要事項:
- Gmail では通常のアカウントパスワードを使用できません。
- アプリパスワードを生成する必要があります:https://myaccount.google.com/apppasswords
- 生成した 16 文字のアプリパスワードを
IMAP_PASS/SMTP_PASSとして使用します。 - Google アカウントで 2 段階認証を有効にする必要があります。
163.com に関する重要事項:
- アカウントパスワードではなく、認証コード(授权码)を使用してください。
- 先にウェブ設定で IMAP/SMTP を有効にしてください。
IMAP コマンド(メールの受信)
check
新着メールまたは未読メールを確認します。
node scripts/imap.js [--account <name>] check [--limit 10] [--mailbox INBOX] [--recent 2h]
オプション:
--limit <n>:結果の最大件数(デフォルト:10)--mailbox <name>:確認するメールボックス(デフォルト:INBOX)--recent <time>:過去 X 時間以内のメールのみ表示します(例:30m、2h、7d)--unseen:未読メッセージのみ表示します
出力は { "results": [...], "meta": {...} } 形式のオブジェクトです(search と同じ形式です。check では meta.fallbackUsed は常に false です)。
fetch
UID を指定して、メールの全文を取得します。
node scripts/imap.js [--account <name>] fetch <uid> [--mailbox INBOX]
download
メールの添付ファイルをすべてダウンロードするか、特定の添付ファイルをダウンロードします。
node scripts/imap.js [--account <name>] download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>]
オプション:
--mailbox <name>:メールボックス(デフォルト:INBOX)--dir <path>:出力ディレクトリ(デフォルト:現在のディレクトリ)--file <filename>:指定した添付ファイルのみダウンロードします(デフォルト:すべてダウンロード)
search
フィルターを指定してメールを検索します。
node scripts/imap.js [--account <name>] search [options]
Options:
--unseen Only unread messages
--seen Only read messages
--from <email> From address contains
--subject <text> Subject contains
--recent <time> From last X time (e.g., 30m, 2h, 7d)
--since <date> After date (YYYY-MM-DD)
--before <date> Before date (YYYY-MM-DD)
--limit <n> Max results (default: 20)
--mailbox <name> Mailbox to search (default: INBOX)
--sort <mode> uid (default, fast) or date (strict INTERNALDATE sort;
fetches all matches, use when mailbox has COPY'd/backdated mail)
出力は { "results": [...], "meta": {...} } というオブジェクトです。results はメッセージオブジェクトの配列で、meta には fallbackUsed、provider、scope、scanned、matched、returned、truncated、および任意の note が含まれます。
163/126/188/yeah.net(NetEase)のアカウントでは、IMAP サーバーがテキストベースの SEARCH(--from/--subject)に対して、空の結果を黙って返します。これらは自動的にクライアント側でフィルタリングされます。サーバー側の SEARCH では日付とフラグの条件のみを適用し、その後、取得したメッセージをローカルでフィルタリングします。日付やフラグの範囲を指定せずに --from/--subject で検索する場合、直近 200 件のメッセージのみがスキャンされます(meta.truncated=true)。より広い範囲を検索するには、--recent/--since を追加してください。
mark-read / mark-unread
メッセージを既読または未読にします。
node scripts/imap.js [--account <name>] mark-read <uid> [uid2 uid3...]
node scripts/imap.js [--account <name>] mark-unread <uid> [uid2 uid3...]
list-mailboxes
利用可能なメールボックス/フォルダーをすべて一覧表示します。
node scripts/imap.js [--account <name>] list-mailboxes
list-accounts
設定済みのメールアカウントをすべて一覧表示します。
node scripts/imap.js list-accounts
node scripts/smtp.js list-accounts
アカウント名、メールアドレス、サーバーアドレス、設定状況が表示されます。
SMTP Commands (メールの送信)
send
SMTP 経由でメールを送信します。
node scripts/smtp.js [--account <name>] send --to <email> --subject <text> [options]
必須:
--to <email>:宛先(複数の場合はコンマ区切り)--subject <text>:メールの件名、または--subject-file <file>
任意:
--body <text>:プレーンテキストの本文--html:本文を HTML として送信--body-file <file>:ファイルから本文を読み込み--html-file <file>:ファイルから HTML を読み込み--cc <email>:CC の宛先--bcc <email>:BCC の宛先--attach <file>:添付ファイル(コンマ区切り)--from <email>:既定の差出人を上書き
例:
# Simple text email
node scripts/smtp.js send --to [email protected] --subject "Hello" --body "World"
# HTML email
node scripts/smtp.js send --to [email protected] --subject "Newsletter" --html --body "<h1>Welcome</h1>"
# Email with attachment
node scripts/smtp.js send --to [email protected] --subject "Report" --body "Please find attached" --attach report.pdf
# Multiple recipients
node scripts/smtp.js send --to "[email protected],[email protected]" --cc "[email protected]" --subject "Update" --body "Team update"
test
自分宛てにテストメールを送信して SMTP 接続をテストします。
node scripts/smtp.js [--account <name>] test
セキュリティに関する注意事項
- 設定は
600権限(所有者のみ読み書き可能)で~/.config/mail-skills/.env(レガシー版では~/.config/imap-smtp-email/.env)に保存されます - Gmail:通常のパスワードは拒否されます。https://myaccount.google.com/apppasswords でアプリパスワードを生成してください
- 163.com では、アカウントのパスワードではなく認証コード(授权码)を使用してください
トラブルシューティング
接続がタイムアウトする場合:
- サーバーが稼働中で、アクセス可能であることを確認してください
- ホスト/ポートの設定を確認してください
認証に失敗する場合:
- ユーザー名を確認してください(通常はメールアドレス全体です)
- パスワードが正しいことを確認してください
- 163.com では、アカウントのパスワードではなく認証コードを使用してください
- Gmail では、通常のパスワードは使用できません。https://myaccount.google.com/apppasswords でアプリパスワードを生成してください
TLS/SSL エラー:
IMAP_TLS/SMTP_SECUREの設定をサーバーの要件に合わせてください- 自己署名証明書の場合は、
IMAP_REJECT_UNAUTHORIZED=falseまたはSMTP_REJECT_UNAUTHORIZED=falseを設定してください
関連スキル
- caldav-sync - CalDAV プロトコルを使用したカレンダーとタスクの管理。Google Calendar、iCloud、NetEase などで、予定、ToDo、空き時間の照会を管理できます。次のコマンドでインストールします:
npx skills add https://github.com/gzlicanyi/mail-skills -s caldav-sync
フィードバック
問題の報告やプルリクエストは、github.com/gzlicanyi/mail-skills で歓迎しています。