メール
専用メールボックスを使用して、IMAP 経由で Qwen Code にタスクを送信し、プレーンテキストの SMTP 応答を受け取ります。初回接続時、選択したフォルダ内の既存メールはスキップされます。以降の接続では保存された UID カーソルから再開します。
設定と起動
メールボックスで IMAP と SMTP を有効にし、Qwen Code を実行するプロセスの環境変数に認証情報をエクスポートします。このチャンネルを settings.json に追加します。
{
"channels": {
"agent-mail": {
"type": "email",
"address": "agent @example.com",
"imapHost": "imap.example.com",
"imapUser": "agent @example.com",
"imapPassword": "$AGENT_IMAP_PASSWORD",
"smtpHost": "smtp.example.com",
"smtpUser": "agent @example.com",
"smtpPassword": "$AGENT_SMTP_PASSWORD",
"privatePolicy": "allowlist",
"allowedUsers": ["you @example.com"],
"sessionScope": "chat_thread",
"cwd": "/path/to/workspace"
}
}
}qwen channel start agent-mail を実行します。パスワードフィールドは既存の $ENV_VAR 参照をサポートしています。設定に平文のパスワードを記載しないでください。アダプターはプロトコルログを無効にし、認証情報を含まずに接続障害を報告します。
Implicit TLS のデフォルトポートは IMAP が 993、SMTP が 465 です。STARTTLS を使用する場合は imapSecure または smtpSecure を false に設定します。デフォルトポートはそれぞれ 143 と 587 になります。STARTTLS と証明書検証は必須です。必要に応じて imapPort と smtpPort をオーバーライドします。プライベート CA の場合は、Qwen Code を起動する前に Node の NODE_EXTRA_CA_CERTS を設定します。
| オプション | デフォルト | 説明 |
|---|---|---|
folder | INBOX | 読み取り専用の IMAP フォルダ(1 つ) |
pollInterval | 60000 | ポーリング間隔(ミリ秒) |
maxMessageBytes | 10485760 | 最大生メッセージサイズ。これより大きいメッセージはスキップされます |
maxAttachmentBytes | 5242880 | 最大個別添付ファイルサイズ。これより大きい添付ファイルは省略されます |
maxTextLength | 32000 | 引用履歴や署名のトリミング前の最大テキスト文字数 |
proactiveRecipients | [] | プロアクティブ配信を許可する正確なベアメイルボックスアドレス |
添付ファイルは最大 16 個まで転送されます。PNG、JPEG、GIF、WebP 画像は既存の画像入力が使用されます。その他のファイルはタスクの有効期間中、生成されたプライベートパスに保存されます。カレンダーおよびカプセル化されたメッセージやレポートパートはサポートされていません。HTML はリモートリソースを読み込まずにテキストに変換されます。共通チャンネルの cwd、model、instructions、sessionScope オプションが適用されます。デフォルトの chat_thread スコープは送信者とスレッドを分離します。single を明示的に選択するとエージェントセッションが共有されます。
アクセスと応答
privatePolicy は allowlist(デフォルト)、open、disabled をサポートします。レガシーの senderPolicy も認識されます。この初期バージョンではペアリングはサポートされていません。allowedUsers と operators のアドレスは小文字に正規化されます。表示名はアクセス権を付与しません。ベア ASCII アドレスがサポートされています。偽造メールをフィルタリングするメールボックスプロバイダーを使用してください。From 許可リストは送信者を認証しません。
エージェントのメールに返信して会話を継続します。Message-ID、In-Reply-To、References が会話と送信者を関連付けます。返信はその送信者のみを対象とします。Reply-To、CC、BCC、およびタスク内のアドレスは SMTP 受信者を変更できません。バックグラウンドタスクの結果は、開始ターンが終了した後、保存された受け入れ済みスレッドを通じて返信されます。No-reply 送信者はタスクを開始できますが応答を受け取りません。エージェントが生成したメール、自動メール、メーリングリストメール、配送レポートは無視されます。
/help、/status などのテキストコマンドや権限返信はメール本文で機能します。メールはデフォルトで followup であり、steering をサポートします。collect は拒否されます。バッファされたメッセージは admission ハンドラーよりも長く存続し、個別の永続的な完了クレームを保持できないためです。タスクが待機中も admission はアクティブです。通常配信は最大 32 件まで同時処理可能です。追加のスロットが制御応答とビジー応答を許可します。キャパシティ到達時の新規タスクには、アクティブなタスクが完了した後に再送するようリクエストされます。
プロアクティブ配信は proactiveRecipients に正確なターゲットが含まれていない限り無効です。スレッド化されたプロアクティブターゲットは、既知の現在許可された送信者またはスレッドに解決される必要があります。不明なターゲットは他の受信者を選択したり代替スレッドを作成したりせずに失敗します。アダプターは最近 256 件の返信ルート、ルートあたり最大 64 個の識別子、最近 1024 件の受信アイデンティティを保持します。IMAP UID の進行状況により、これらのメタデータエントリが期限切れになった後も古い配信のリプレイが防止されます。削除されたスレッドルートは、別の許可されたメッセージが復元するまでプロアクティブ返信を受信できません。
リカバリ
状態は $QWEN_HOME/channels/<workspace>/email-<account-hash>/state.json に保存されます(デフォルトの QWEN_HOME は ~/.qwen)。チャンネル名、正規化されたワークスペース、およびメールボックスのエンドポイント、ユーザー、フォルダがストアを決定します。所有できるのは 1 つのプロセスのみです。アカウントを切り替えると別のベースラインが確立されます。UIDVALIDITY の変更も既存のフォルダ内容をスキップします。
アダプターはタスク開始前に処理中の UID を永続化し、各 SMTP 送信前に outboundPending メッセージ ID を永続化します(プロアクティブ送信を含む)。対応する操作が完了した後、各レコードを削除します。プロセスが実行中に停止した場合、または SMTP が不確実な結果を返した場合、レコードは残ります。再起動時に状態パス、処理待ち UID、送信待ちメッセージ ID が報告され、それらのリプレイは拒否されます。チャンネルを停止し、メールボックスとタスクの副作用を検査し、状態の pending 配列から調整済みの UID のみを、outboundPending から調整済みの送信済み ID のみを削除してから再起動してください。カーソルとスレッドメタデータはそのまま保持します。状態ファイルをリトライメカニズムとして削除しないでください。削除すると新しいベースラインが作成され、既存のメールがスキップされます。
メールのスレッド識別子と admission の進行状況は再起動後も保持されます。エージェント履歴の復元はチャンネルランタイムに従います。現在のスタンドアロンの channel start パスはコールドスタート時に保存されたエージェントセッションを復元しません。デーモンワーカーはルートを復元します。
エージェントの副作用、SMTP 受け入れ、ローカルカーソルは 1 つのトランザクションでコミットできません。チャンネルを停止すると、キューに入れられたターンがエージェント作業を開始する前にブロックされます。すでにエージェントで実行中の操作は完了する場合があります。このリカバリポリシーは不確実な作業の自動再実行を回避します。中断後のオペレーターによる reconciliation が必要です。破損または読み取り不能な状態も起動を停止します。古い添付ファイルディレクトリは reconciliation の後、新しい作業を受信する前に削除されます。
プロバイダー OAuth、リッチ HTML 出力、メールボックス管理、S/MIME、PGP、カレンダー処理はこのバージョンの範囲外です。