Email RFCプロトコルサポート - 完全な標準&仕様ガイド
このドキュメントについて
このドキュメントは Forward Email の RFC(Request for Comments)プロトコルサポートについて説明しています。Forward Email は IMAP/POP3 機能のために内部で WildDuck を使用しているため、ここに記載されているプロトコルのサポートと制限は WildDuck の実装を反映しています。
Important
Forward Email はメッセージストレージに MongoDB(WildDuck が元々使用していたもの)ではなく SQLite を使用しています。これにより、以下に記載されている特定の実装の詳細に影響があります。
ソースコード: https://github.com/forwardemail/forwardemail.net
アーキテクチャ概要
メールサービス比較 - プロトコルサポートとRFC標準準拠
Important
サンドボックス化および量子耐性暗号化: Forward Email は、あなたのパスワード(あなただけが知っている)を使って個別に暗号化された SQLite メールボックスを保存する唯一のメールサービスです。各メールボックスは sqleet(ChaCha20-Poly1305)で暗号化されており、自己完結型でサンドボックス化され、ポータブルです。パスワードを忘れるとメールボックスを失い、Forward Email でも回復できません。詳細は 量子安全な暗号化メール を参照してください。
主要なメールプロバイダー間のメールプロトコルサポートと RFC 標準の実装を比較します:
| 機能 | Forward Email | Postfix/Dovecot | Gmail | iCloud Mail | Outlook.com | Fastmail | Yahoo/AOL (Verizon) | ProtonMail | Tutanota |
|---|---|---|---|---|---|---|---|---|---|
| カスタムドメイン価格 | 無料 | 無料 | $7.20/月 | $0.99/月 | $7.20/月 | $5/月 | $3.19/月 | $4.99/月 | $3.27/月 |
| IMAP4rev1 (RFC 3501) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ⚠️ ブリッジ経由 | ❌ サポートなし |
| IMAP4rev2 (RFC 9051) | ⚠️ 部分的 | ⚠️ 部分的 | ⚠️ 31% | ⚠️ 92% | ⚠️ 46% | ⚠️ 69% | ⚠️ 85% | ⚠️ ブリッジ経由 | ❌ サポートなし |
| POP3 (RFC 1939) | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート | ✅ サポート | ⚠️ ブリッジ経由 | ❌ サポートなし |
| SMTP (RFC 5321) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ⚠️ ブリッジ経由 | ❌ サポートなし |
| JMAP (RFC 8620) | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし |
| DKIM (RFC 6376) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| SPF (RFC 7208) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| DMARC (RFC 7489) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| ARC (RFC 8617) | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし |
| MTA-STS (RFC 8461) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| DANE (RFC 7671) | ✅ サポート | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ✅ サポート | ✅ サポート |
| DSN (RFC 3461) | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート | ⚠️ 不明 | ❌ サポートなし | ⚠️ ブリッジ経由 | ❌ サポートなし |
| REQUIRETLS (RFC 8689) | ✅ サポート | ✅ サポート | ⚠️ 不明 | ⚠️ 不明 | ⚠️ 不明 | ⚠️ 不明 | ⚠️ 不明 | ⚠️ ブリッジ経由 | ❌ サポートなし |
| ManageSieve (RFC 5804) | ✅ サポート | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし |
| OpenPGP (RFC 9580) | ✅ サポート | ⚠️ プラグイン経由 | ⚠️ サードパーティ | ⚠️ サードパーティ | ⚠️ サードパーティ | ⚠️ サードパーティ | ⚠️ サードパーティ | ✅ ネイティブ | ❌ サポートなし |
| S/MIME (RFC 8551) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ⚠️ 部分的 | ❌ サポートなし | ✅ サポート | ❌ サポートなし |
| CalDAV (RFC 4791) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ✅ ブリッジ経由 | ❌ サポートなし |
| CardDAV (RFC 6352) | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ✅ ブリッジ経由 | ❌ サポートなし |
| タスク (VTODO) | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし |
| Sieve (RFC 5228) | ✅ サポート | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ❌ サポートなし |
| Catch-All | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ✅ サポート | ❌ サポートなし | ❌ サポートなし | ✅ サポート |
| 無制限エイリアス | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート |
| 二要素認証 | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| プッシュ通知 | ✅ サポート | ⚠️ プラグイン経由 | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート |
| カレンダー/連絡先デスクトップ | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし |
| 高度な検索 | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート | ✅ サポート |
| API/統合 | ✅ 39 エンドポイント | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ✅ サポート | ❌ サポートなし | ✅ サポート | ❌ サポートなし |
プロトコルサポートの可視化
コアメールプロトコル
メールプロトコルのフロー
IMAP4 メールプロトコルと拡張
Note
Forward Email は IMAP4rev1 (RFC 3501) をサポートし、IMAP4rev2 (RFC 9051) の機能を部分的にサポートしています。
Forward Email は WildDuck メールサーバーの実装を通じて堅牢な IMAP4 サポートを提供します。このサーバーは IMAP4rev1 (RFC 3501) を実装し、IMAP4rev2 (RFC 9051) の拡張機能を部分的にサポートしています。
Forward Email の IMAP 機能は WildDuck 依存関係によって提供されています。以下のメール RFC がサポートされています:
| RFC | タイトル | 実装に関する注記 |
|---|---|---|
| RFC 3501 | インターネットメッセージアクセスプロトコル (IMAP) - バージョン4rev1 | 意図的な差異を含む完全サポート(下記参照) |
| RFC 2177 | IMAP4 IDLE コマンド | プッシュスタイル通知 |
| RFC 2342 | IMAP4 名前空間 | メールボックス名前空間のサポート |
| RFC 2087 | IMAP4 QUOTA 拡張 | ストレージクォータ管理 |
| RFC 2971 | IMAP4 ID 拡張 | クライアント/サーバー識別 |
| RFC 5161 | IMAP4 ENABLE 拡張 | IMAP 拡張機能の有効化 |
| RFC 4959 | SASL 初期クライアント応答のための IMAP 拡張 (SASL-IR) | 初期クライアント応答 |
| RFC 3691 | IMAP4 UNSELECT コマンド | EXPUNGE なしでメールボックスを閉じる |
| RFC 4315 | IMAP UIDPLUS 拡張 | 拡張 UID コマンド |
| RFC 7162 | IMAP 拡張: クイックフラグ変更の再同期 (CONDSTORE) | 条件付き STORE |
| RFC 6154 | 特殊用途メールボックスのための IMAP LIST 拡張 | 特殊メールボックス属性 |
| RFC 6851 | IMAP MOVE 拡張 | 原子 MOVE コマンド |
| RFC 6855 | UTF-8 対応のための IMAP サポート | UTF-8 サポート |
| RFC 3348 | IMAP4 子メールボックス拡張 | 子メールボックス情報 |
| RFC 7889 | 最大アップロードサイズの広告のための IMAP4 拡張 (APPENDLIMIT) | 最大アップロードサイズ |
| サポートされているIMAP拡張機能: |
| Extension | RFC | Status | Description |
|---|---|---|---|
| IDLE | RFC 2177 | ✅ Supported | プッシュスタイルの通知 |
| NAMESPACE | RFC 2342 | ✅ Supported | メールボックスの名前空間サポート |
| QUOTA | RFC 2087 | ✅ Supported | ストレージクォータ管理 |
| ID | RFC 2971 | ✅ Supported | クライアント/サーバ識別 |
| ENABLE | RFC 5161 | ✅ Supported | IMAP拡張機能の有効化 |
| SASL-IR | RFC 4959 | ✅ Supported | 初期クライアント応答 |
| UNSELECT | RFC 3691 | ✅ Supported | EXPUNGEなしでメールボックスを閉じる |
| UIDPLUS | RFC 4315 | ✅ Supported | 拡張UIDコマンド |
| CONDSTORE | RFC 7162 | ✅ Supported | 条件付きSTORE |
| SPECIAL-USE | RFC 6154 | ✅ Supported | 特殊メールボックス属性 |
| MOVE | RFC 6851 | ✅ Supported | 原子MOVEコマンド |
| UTF8=ACCEPT | RFC 6855 | ✅ Supported | UTF-8サポート |
| CHILDREN | RFC 3348 | ✅ Supported | 子メールボックス情報 |
| APPENDLIMIT | RFC 7889 | ✅ Supported | 最大アップロードサイズ |
| XLIST | 非標準 | ✅ Supported | Gmail互換のフォルダー一覧 |
| XAPPLEPUSHSERVICE | 非標準 | ✅ Supported | Apple Push Notification Service |
RFC仕様からのIMAPプロトコルの違い
Warning
以下のRFC仕様からの違いはクライアントの互換性に影響を与える可能性があります。
Forward Emailは意図的にいくつかのIMAP RFC仕様から逸脱しています。これらの違いはWildDuckから継承されており、以下に記載されています:
- \Recentフラグなし:
\Recentフラグは実装されていません。すべてのメッセージはこのフラグなしで返されます。 - RENAMEはサブフォルダーに影響しない: フォルダーの名前変更時にサブフォルダーは自動的に名前変更されません。データベース上のフォルダー階層はフラットです。
- INBOXは名前変更不可: RFC 3501ではINBOXの名前変更が許可されていますが、Forward Emailでは明示的に禁止されています。詳細はWildDuckのソースコードを参照してください。
- 未承諾のFLAGS応答なし: フラグが変更されても、クライアントに未承諾のFLAGS応答は送信されません。
- 削除済みメッセージに対するSTOREはNOを返す: 削除済みメッセージのフラグ変更試行は無視されず、NOを返します。
- SEARCHのCHARSETは無視される: SEARCHコマンドの
CHARSET引数は無視され、すべてUTF-8で検索されます。 - STOREのMODSEQメタデータは無視される: STOREコマンドの
MODSEQメタデータは無視されます。 - SEARCH TEXTとSEARCH BODY: Forward EmailはMongoDBの
$text検索の代わりにSQLite FTS5(全文検索)を使用しています。これにより以下が可能です:NOT演算子のサポート(MongoDBは未対応)- ランク付けされた検索結果
- 大規模メールボックスでも100ms未満の高速検索
- 自動エクスパunge動作:
\Deletedマークされたメッセージはメールボックス閉鎖時に自動的にエクスパungeされます。 - メッセージの忠実性: 一部のメッセージ変更は元のメッセージ構造を完全には保持しない場合があります。
IMAP4rev2の部分サポート:
Forward EmailはIMAP4rev1 (RFC 3501)を実装し、IMAP4rev2 (RFC 9051)の一部機能を部分的にサポートしています。以下のIMAP4rev2機能はまだサポートされていません:
- LIST-STATUS - LISTとSTATUSコマンドの統合
- LITERAL- - 非同期リテラル(マイナスバリアント)
- OBJECTID - 一意のオブジェクト識別子
- SAVEDATE - 保存日時属性
- REPLACE - 原子的メッセージ置換
- UNAUTHENTICATE - 接続を閉じずに認証解除
緩やかなボディ構造の取り扱い:
Forward Emailは不正なMIME構造に対して「緩やかなボディ」処理を行い、厳密なRFC解釈とは異なる場合があります。これは標準に完全には準拠しない実際のメールとの互換性を向上させます。 METADATA拡張 (RFC 5464):
IMAPのMETADATA拡張はサポートされていません。この拡張に関する詳細はRFC 5464をご覧ください。この機能追加に関する議論はWildDuck Issue #937にあります。
サポートされていないIMAP拡張
以下のIANA IMAP Capabilities RegistryにあるIMAP拡張はサポートされていません:
| RFC | タイトル | 理由 |
|---|---|---|
| RFC 2086 | IMAP4 ACL拡張 | 共有フォルダは実装されていません。WildDuck Issue #427をご覧ください |
| RFC 5256 | IMAP SORTおよびTHREAD拡張 | スレッド機能は内部的に実装されていますが、RFC 5256プロトコル経由ではありません。WildDuck Issue #12をご覧ください |
| RFC 5162 | クイックメールボックス再同期のためのIMAP4拡張 (QRESYNC) | 実装されていません |
| RFC 5464 | IMAP METADATA拡張 | メタデータ操作は無視されます。WildDuck documentationをご覧ください |
| RFC 5258 | IMAP4 LISTコマンド拡張 | 実装されていません |
| RFC 5267 | IMAP4のコンテキスト | 実装されていません |
| RFC 5465 | IMAP NOTIFY拡張 | 実装されていません |
| RFC 5466 | IMAP4 FILTERS拡張 | 実装されていません |
| RFC 6203 | IMAP4のあいまい検索拡張 | 実装されていません |
| RFC 6785 | IMAP4実装推奨 | 推奨事項は完全には遵守されていません |
| RFC 7162 | IMAP拡張: クイックフラグ変更再同期 (CONDSTORE) および クイックメールボックス再同期 (QRESYNC) | 実装されていません |
| RFC 8437 | 接続再利用のためのIMAP UNAUTHENTICATE拡張 | 実装されていません |
| RFC 8438 | STATUS=SIZEのためのIMAP拡張 | 実装されていません |
| RFC 8457 | IMAP "$Important"キーワードおよび"\Important"特別使用属性 | 実装されていません |
| RFC 8474 | オブジェクト識別子のためのIMAP拡張 | 実装されていません |
| RFC 9051 | インターネットメッセージアクセスプロトコル (IMAP) - バージョン4rev2 | Forward EmailはIMAP4rev1 (RFC 3501)を実装しています |
POP3メールプロトコルと拡張機能
Note
Forward Emailは、標準的な拡張機能を備えたPOP3(RFC 1939)によるメール取得をサポートしています。
Forward EmailのPOP3機能は、WildDuck依存関係によって提供されています。以下のメールRFCがサポートされています:
| RFC | タイトル | 実装に関する注意事項 |
|---|---|---|
| RFC 1939 | Post Office Protocol - Version 3 (POP3) | 意図的な差異を含む完全サポート(下記参照) |
| RFC 2595 | Using TLS with IMAP, POP3 and ACAP | STARTTLSサポート |
| RFC 2449 | POP3 Extension Mechanism | CAPAコマンドサポート |
Forward Emailは、IMAPよりもシンプルなこのプロトコルを好むクライアント向けにPOP3サポートを提供しています。POP3は、メールを単一のデバイスにダウンロードし、サーバーから削除したいユーザーに最適です。
サポートされているPOP3拡張機能:
| 拡張機能 | RFC | ステータス | 説明 |
|---|---|---|---|
| TOP | RFC 1939 | ✅ サポート済み | メッセージヘッダーの取得 |
| USER | RFC 1939 | ✅ サポート済み | ユーザー名認証 |
| UIDL | RFC 1939 | ✅ サポート済み | ユニークメッセージ識別子 |
| EXPIRE | RFC 2449 | ✅ サポート済み | メッセージの有効期限ポリシー |
RFC仕様からのPOP3プロトコルの差異
Warning
POP3はIMAPに比べて固有の制限があります。
Important
重要な差異:Forward EmailとWildDuckのPOP3 DELE動作の違い
Forward Emailは、WildDuckとは異なり、POP3のDELEコマンドに対してRFC準拠の恒久的削除を実装しています。WildDuckはメッセージをゴミ箱に移動します。
Forward Emailの動作(ソースコード):
DELE→QUITでメッセージを恒久的に削除- RFC 1939仕様に完全準拠
- Dovecot(デフォルト)、Postfix、その他の標準準拠サーバーの動作と一致
WildDuckの動作(議論):
DELE→QUITでメッセージをゴミ箱に移動(Gmail風)- ユーザーの安全性を考慮した意図的な設計決定
- RFC非準拠だが誤削除防止に寄与
Forward Emailが異なる理由:
- RFC準拠: RFC 1939仕様に従う
- ユーザーの期待: ダウンロードして削除するワークフローは恒久的削除を想定
- ストレージ管理: 適切なディスク容量の回収
- 相互運用性: 他のRFC準拠サーバーと一貫性がある
Note
POP3メッセージ一覧: Forward EmailはINBOXの全メッセージを制限なく一覧表示します。これはWildDuckがデフォルトで250メッセージに制限しているのと異なります。詳細はソースコードを参照してください。
単一デバイスアクセス:
POP3は単一デバイスアクセスを想定しています。メッセージは通常ダウンロードされサーバーから削除されるため、複数デバイス間の同期には適していません。
フォルダサポートなし:
POP3はINBOXフォルダのみアクセス可能です。送信済み、下書き、ゴミ箱など他のフォルダはPOP3経由ではアクセスできません。
限定的なメッセージ管理:
POP3は基本的なメッセージ取得と削除のみを提供します。フラグ付け、移動、検索などの高度な機能は利用できません。
サポートされていないPOP3拡張機能
IANA POP3 Extension Mechanism Registryにある以下のPOP3拡張機能はサポートされていません:
| RFC | タイトル | 理由 |
|---|---|---|
| RFC 6856 | Post Office Protocol Version 3 (POP3) Support for UTF-8 | WildDuck POP3サーバーで未実装 |
| RFC 2595 | STLSコマンド | STARTTLSのみ対応、STLSは非対応 |
| RFC 3206 | SYSおよびAUTH POP応答コード | 未実装 |
SMTP Email Protocol and Extensions
Note
Forward Emailは、安全で信頼性の高いメール配信のための最新拡張を備えたSMTP(RFC 5321)をサポートしています。
Forward EmailのSMTP機能は複数のコンポーネントによって提供されています:smtp-server(nodemailer)、zone-mta、およびカスタム実装です。以下のメールRFCがサポートされています:
| RFC | タイトル | 実装ノート |
|---|---|---|
| RFC 5321 | Simple Mail Transfer Protocol (SMTP) | 完全サポート |
| RFC 3207 | SMTP Service Extension for Secure SMTP over Transport Layer Security (STARTTLS) | TLS/SSLサポート |
| RFC 4954 | SMTP Service Extension for Authentication (AUTH) | PLAIN、LOGIN、CRAM-MD5、XOAUTH2 |
| RFC 6531 | SMTP Extension for Internationalized Email (SMTPUTF8) | ネイティブUnicodeメールアドレス対応 |
| RFC 3461 | SMTP Service Extension for Delivery Status Notifications (DSN) | DSN完全対応 |
| RFC 3463 | Enhanced Mail System Status Codes | 応答における拡張ステータスコード |
| RFC 1870 | SMTP Service Extension for Message Size Declaration (SIZE) | 最大メッセージサイズの通知 |
| RFC 2920 | SMTP Service Extension for Command Pipelining (PIPELINING) | コマンドパイプライニング対応 |
| RFC 1652 | SMTP Service Extension for 8bit-MIMEtransport (8BITMIME) | 8ビットMIME対応 |
| RFC 6152 | SMTP Service Extension for 8-bit MIME Transport | 8ビットMIME対応 |
| RFC 2034 | SMTP Service Extension for Returning Enhanced Error Codes (ENHANCEDSTATUSCODES) | 拡張ステータスコード対応 |
Forward Emailは、セキュリティ、信頼性、機能性を強化する最新拡張をサポートしたフル機能のSMTPサーバーを実装しています。
サポートされているSMTP拡張機能:
| 拡張機能 | RFC | ステータス | 説明 |
|---|---|---|---|
| PIPELINING | RFC 2920 | ✅ 対応済み | コマンドパイプライニング |
| SIZE | RFC 1870 | ✅ 対応済み | メッセージサイズ通知(52MB制限) |
| ETRN | RFC 1985 | ✅ 対応済み | リモートキュー処理 |
| STARTTLS | RFC 3207 | ✅ 対応済み | TLSへのアップグレード |
| ENHANCEDSTATUSCODES | RFC 2034 | ✅ 対応済み | 拡張ステータスコード |
| 8BITMIME | RFC 6152 | ✅ 対応済み | 8ビットMIME転送 |
| DSN | RFC 3461 | ✅ 対応済み | 配信状況通知 |
| CHUNKING | RFC 3030 | ✅ 対応済み | チャンクメッセージ転送 |
| SMTPUTF8 | RFC 6531 | ⚠️ 部分対応 | UTF-8メールアドレス(部分対応) |
| REQUIRETLS | RFC 8689 | ✅ 対応済み | 配信にTLSを必須 |
配信状況通知 (DSN)
Tip
DSN は送信されたメールの詳細な配信状況情報を提供します。
Forward Email は DSN (RFC 3461) を完全にサポートしており、送信者が配信状況通知を要求できるようにします。この機能は以下を提供します:
- メッセージが配信された際の 成功通知
- 詳細なエラー情報を含む 失敗通知
- 配信が一時的に遅延した際の 遅延通知
DSN は特に以下の用途に有用です:
- 重要なメッセージの配信確認
- 配信問題のトラブルシューティング
- 自動化されたメール処理システム
- コンプライアンスおよび監査要件
REQUIRETLS サポート
Important
Forward Email は REQUIRETLS を明示的に宣伝し、強制する数少ないプロバイダーの一つです。
Forward Email は REQUIRETLS (RFC 8689) をサポートしており、メールメッセージが TLS 暗号化接続上でのみ配信されることを保証します。これにより以下が実現されます:
- 配信経路全体の エンドツーエンド暗号化
- メール作成画面のチェックボックスによる ユーザー向け強制
- 暗号化されていない配信試行の 拒否
- 機密通信のための 強化されたセキュリティ
サポートされていない SMTP 拡張機能
IANA SMTP Service Extensions Registry にある以下の SMTP 拡張機能はサポートされていません:
| RFC | タイトル | 理由 |
|---|---|---|
| RFC 4865 | 将来メッセージリリースのための SMTP サブミッションサービス拡張 (FUTURERELEASE) | 未実装 |
| RFC 6710 | メッセージ転送優先度のための SMTP 拡張 (MT-PRIORITY) | 未実装 |
| RFC 7293 | Require-Recipient-Valid-Since ヘッダーフィールドと SMTP サービス拡張 | 未実装 |
| RFC 7372 | Email Auth ステータスコード | 完全には未実装 |
| RFC 4468 | メッセージサブミッション BURL 拡張 | 未実装 |
| RFC 3030 | 大容量およびバイナリ MIME メッセージの送信のための SMTP サービス拡張 (CHUNKING, BINARYMIME) | 未実装 |
| RFC 2852 | Deliver By SMTP サービス拡張 | 未実装 |
JMAP メールプロトコル
Caution
Forward Email は 現在 JMAP をサポートしていません。
| RFC | タイトル | ステータス | 理由 |
|---|---|---|---|
| RFC 8620 | JSON メタアプリケーションプロトコル (JMAP) | ❌ サポートなし | Forward Email は IMAP/POP3/SMTP と包括的な REST API を使用しています |
JMAP (JSON Meta Application Protocol) は IMAP に代わるモダンなメールプロトコルです。
JMAP がサポートされていない理由:
「JMAP は発明されるべきでなかった怪物です。TCP/IMAP(今日の基準では既に悪いプロトコル)を HTTP/JSON に変換しようとしており、異なるトランスポートを使いながらもその精神を保っています。」 — Andris Reinman, HN Discussion "JMAPは10年以上前から存在していますが、ほとんど採用されていません" – Andris Reinman, GitHub Discussion
追加のコメントは https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=jmap andris&sort=byDate&type=comment もご覧ください。
Forward Emailは現在、優れたIMAP、POP3、SMTPサポートと、メール管理のための包括的なREST APIの提供に注力しています。JMAPのサポートは、ユーザーの需要やエコシステムの採用状況に応じて将来的に検討される可能性があります。
代替案: Forward Emailは、プログラムによるメールアクセスにおいてJMAPと同様の機能を提供する39のエンドポイントを持つ完全なREST APIを提供しています。
Email Security
Email Security Architecture
Email Message Authentication Protocols
Note
Forward Emailは、なりすまし防止とメッセージの完全性を確保するために、主要なメール認証プロトコルをすべて実装しています。
Forward Emailはメール認証にmailauthライブラリを使用しています。以下のRFCがサポートされています:
| RFC | タイトル | 実装に関する注記 |
|---|---|---|
| RFC 6376 | DomainKeys Identified Mail (DKIM)署名 | DKIM署名および検証を完全にサポート |
| RFC 8463 | DKIMの新しい暗号署名方式(Ed25519-SHA256) | RSA-SHA256およびEd25519-SHA256署名アルゴリズムの両方をサポート |
| RFC 7208 | Sender Policy Framework (SPF) | SPFレコードの検証 |
| RFC 7489 | ドメインベースメッセージ認証、報告、および適合性(DMARC) | DMARCポリシーの適用 |
| RFC 8617 | Authenticated Received Chain (ARC) | ARCのシーリングおよび検証 |
メール認証プロトコルは、メッセージが送信者のものであることを検証し、転送中に改ざんされていないことを保証します。
Authentication Protocol Support
| プロトコル | RFC | ステータス | 説明 |
|---|---|---|---|
| DKIM | RFC 6376 | ✅ 対応済み | DomainKeys Identified Mail - 暗号署名 |
| SPF | RFC 7208 | ✅ 対応済み | Sender Policy Framework - IPアドレス認可 |
| DMARC | RFC 7489 | ✅ 対応済み | ドメインベースメッセージ認証 - ポリシー適用 |
| ARC | RFC 8617 | ✅ 対応済み | Authenticated Received Chain - 転送間の認証情報保持 |
DKIM (DomainKeys Identified Mail)
DKIM はメールヘッダーに暗号署名を追加し、受信者がメッセージがドメイン所有者によって認可され、転送中に改ざんされていないことを検証できるようにします。
Forward Email は DKIM の署名と検証に mailauth を使用しています。
主な特徴:
- すべての送信メッセージに対する自動 DKIM 署名
- RSA および Ed25519 キーのサポート
- 複数セレクターのサポート
- 受信メッセージの DKIM 検証
SPF (Sender Policy Framework)
SPF はドメイン所有者が自分のドメインを代表してメールを送信することを許可された IP アドレスを指定できるようにします。
主な特徴:
- 受信メッセージの SPF レコード検証
- 詳細な結果を伴う自動 SPF チェック
- include、redirect、および all メカニズムのサポート
- ドメインごとに設定可能な SPF ポリシー
DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC は SPF と DKIM を基にポリシーの適用とレポート機能を提供します。
主な特徴:
- DMARC ポリシーの適用(none、quarantine、reject)
- SPF と DKIM の整合性チェック
- DMARC 集計レポート
- ドメインごとの DMARC ポリシー
ARC (Authenticated Received Chain)
ARC は転送やメーリングリストの変更を経てもメール認証結果を保持します。
Forward Email は ARC の検証とシールに mailauth ライブラリを使用しています。
主な特徴:
- 転送メッセージの ARC シール
- 受信メッセージの ARC 検証
- 複数ホップにわたるチェーン検証
- 元の認証結果を保持
Authentication Flow
Email Transport Security Protocols
Important
Forward Email は転送中のメールを保護するために複数層のトランスポートセキュリティを実装しています。
Forward Email は最新のトランスポートセキュリティプロトコルを実装しています:
| RFC | タイトル | ステータス | 実装ノート |
|---|---|---|---|
| RFC 8461 | SMTP MTA Strict Transport Security (MTA-STS) | ✅ 対応済み | IMAP、SMTP、MX サーバーで広く使用されています。詳細は create-mta-sts-cache.js と get-transporter.js を参照してください。 |
| RFC 8460 | SMTP TLS Reporting | ✅ 対応済み | mailauth ライブラリ経由で対応 |
| RFC 7671 | The DNS-Based Authentication of Named Entities (DANE) Protocol: Updates and Operational Guidance | ✅ 対応済み | 送信 SMTP 接続に対する完全な DANE 検証。詳細は mx-connect PR #22 を参照 |
| RFC 6698 | The DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS) Protocol: TLSA | ✅ 対応済み | RFC 6698 の完全対応:PKIX-TA、PKIX-EE、DANE-TA、DANE-EE 使用タイプ。詳細は mx-connect PR #22 を参照 |
| RFC 8314 | Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access | ✅ 対応済み | すべての接続に TLS を必須化 |
| RFC 8689 | SMTP Service Extension for Requiring TLS (REQUIRETLS) | ✅ 対応済み | REQUIRETLS SMTP 拡張および "TLS-Required" ヘッダーの完全対応 |
| Transport security protocolsは、メールサーバー間の送信中にメールメッセージが暗号化および認証されることを保証します。 |
Transport Security Support
| プロトコル | RFC | ステータス | 説明 |
|---|---|---|---|
| TLS | RFC 8314 | ✅ 対応済み | Transport Layer Security - 暗号化された接続 |
| MTA-STS | RFC 8461 | ✅ 対応済み | Mail Transfer Agent Strict Transport Security |
| DANE | RFC 7671 | ✅ 対応済み | DNSベースの認証された名前付きエンティティ |
| REQUIRETLS | RFC 8689 | ✅ 対応済み | 配信経路全体でTLSを必須にする |
TLS (Transport Layer Security)
Forward Emailはすべてのメール接続(SMTP、IMAP、POP3)に対してTLS暗号化を強制します。
主な特徴:
- TLS 1.2およびTLS 1.3対応
- 自動証明書管理
- 完全前方秘匿性(PFS)
- 強力な暗号スイートのみ
MTA-STS (Mail Transfer Agent Strict Transport Security)
MTA-STSは、HTTPS経由でポリシーを公開することで、メールがTLSで暗号化された接続のみで配信されることを保証します。
Forward EmailはMTA-STSキャッシュ作成スクリプトを使用してMTA-STSを実装しています。
主な特徴:
- 自動MTA-STSポリシー公開
- パフォーマンス向上のためのポリシーキャッシュ
- ダウングレード攻撃防止
- 証明書検証の強制
DANE (DNS-based Authentication of Named Entities)
Note
Forward Emailは現在、送信SMTP接続に対して完全なDANEサポートを提供しています。
DANEはDNSSECを利用してTLS証明書情報をDNSに公開し、メールサーバーが証明書機関に依存せずに証明書を検証できるようにします。
主な特徴:
- ✅ 送信SMTP接続に対する完全なDANE検証
- ✅ RFC 6698完全対応:PKIX-TA、PKIX-EE、DANE-TA、DANE-EE使用タイプ
- ✅ TLSアップグレード時のTLSAレコードに対する証明書検証
- ✅ 複数MXホストに対する並列TLSA解決
- ✅ ネイティブ
dns.resolveTlsaの自動検出(Node.js v22.15.0+、v23.9.0+) - ✅ 古いNode.jsバージョン向けのカスタムリゾルバサポート(Tangerine経由)
- DNSSEC署名済みドメインが必要
Tip
実装詳細: DANEサポートはmx-connect PR #22を通じて追加され、送信SMTP接続に対する包括的なDANE/TLSAサポートを提供します。
REQUIRETLS
Tip
Forward Emailはユーザー向けREQUIRETLSサポートを提供する数少ないプロバイダーの一つです。
REQUIRETLSは、メールメッセージが配信経路全体でTLS暗号化された接続のみで配信されることを保証します。
主な特徴:
- メール作成画面のユーザー向けチェックボックス
- 暗号化されていない配信の自動拒否
- エンドツーエンドTLS強制
- 詳細な失敗通知
Tip
ユーザー向けTLS強制: Forward EmailはMy Account > Domains > Settingsの下にすべての受信接続にTLSを強制するチェックボックスを提供しています。有効にすると、TLS暗号化されていない接続で送信された受信メールは530エラーコードで拒否され、すべての受信メールが転送中に暗号化されることを保証します。
Transport Security Flow
Email Message Encryption
Note
Forward Email はエンドツーエンドのメール暗号化に OpenPGP と S/MIME の両方をサポートしています。
Forward Email は OpenPGP と S/MIME 暗号化をサポートしています:
| RFC | タイトル | ステータス | 実装ノート |
|---|---|---|---|
| RFC 9580 | OpenPGP (RFC 4880 の後継) | ✅ サポート | OpenPGP.js v6+ 経由の統合。詳細は FAQ を参照してください |
| RFC 8551 | Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 メッセージ仕様 | ✅ サポート | RSA と ECC の両アルゴリズムをサポート。詳細は FAQ を参照してください |
メッセージ暗号化プロトコルは、メッセージが転送中に傍受された場合でも、意図した受信者以外がメール内容を読むことができないように保護します。
Encryption Support
| プロトコル | RFC | ステータス | 説明 |
|---|---|---|---|
| OpenPGP | RFC 9580 | ✅ サポート | Pretty Good Privacy - 公開鍵暗号方式 |
| S/MIME | RFC 8551 | ✅ サポート | Secure/Multipurpose Internet Mail Extensions |
| WKD | Draft | ✅ サポート | Web Key Directory - 自動鍵検出 |
OpenPGP (Pretty Good Privacy)
OpenPGP は公開鍵暗号を用いたエンドツーエンド暗号化を提供します。Forward Email は Web Key Directory (WKD) プロトコルを通じて OpenPGP をサポートしています。
主な特徴:
- WKD による自動鍵検出
- 暗号化された添付ファイルのための PGP/MIME サポート
- メールクライアントによる鍵管理
- GPG、Mailvelope、その他の OpenPGP ツールと互換性あり
使い方:
- メールクライアントで PGP 鍵ペアを生成する
- 公開鍵を Forward Email の WKD にアップロードする
- あなたの鍵は他のユーザーに自動的に検出可能になる
- 暗号化メールの送受信をシームレスに行う
S/MIME (Secure/Multipurpose Internet Mail Extensions)
S/MIME は X.509 証明書を用いたメール暗号化とデジタル署名を提供します。
主な特徴:
- 証明書ベースの暗号化
- メッセージ認証のためのデジタル署名
- ほとんどのメールクライアントでネイティブサポート
- エンタープライズグレードのセキュリティ
使い方:
- 証明書機関から S/MIME 証明書を取得する
- メールクライアントに証明書をインストールする
- メッセージの暗号化/署名をクライアントで設定する
- 受信者と証明書を交換する
SQLite Mailbox Encryption
Important
Forward Email は暗号化された SQLite メールボックスによる追加のセキュリティ層を提供します。
メッセージレベルの暗号化に加え、Forward Email は sqleet (ChaCha20-Poly1305) を使用してメールボックス全体を暗号化します。
主な特徴:
- パスワードベースの暗号化 - パスワードはあなただけが知っています
- 量子耐性 - ChaCha20-Poly1305 暗号
- ゼロ知識 - Forward Email はあなたのメールボックスを復号できません
- サンドボックス化 - 各メールボックスは分離されポータブル
- 復旧不可 - パスワードを忘れるとメールボックスは失われます
暗号化比較
| 機能 | OpenPGP | S/MIME | SQLite暗号化 |
|---|---|---|---|
| エンドツーエンド | ✅ はい | ✅ はい | ✅ はい |
| 鍵管理 | 自己管理 | CA発行 | パスワードベース |
| クライアントサポート | プラグイン必要 | ネイティブ | 透過的 |
| ユースケース | 個人用 | 企業用 | ストレージ |
| 量子耐性 | ⚠️ 鍵による | ⚠️ 証明書による | ✅ はい |
暗号化フロー
拡張機能
メールメッセージフォーマット標準
Note
Forward Emailはリッチコンテンツと国際化のための最新のメールフォーマット標準をサポートしています。
Forward Emailは標準的なメールメッセージフォーマットをサポートしています:
| RFC | タイトル | 実装ノート |
|---|---|---|
| RFC 5322 | インターネットメッセージフォーマット | フルサポート |
| RFC 2045 | MIME パート1: インターネットメッセージ本文のフォーマット | フルMIMEサポート |
| RFC 2046 | MIME パート2: メディアタイプ | フルMIMEサポート |
| RFC 2047 | MIME パート3: 非ASCIIテキストのためのメッセージヘッダー拡張 | フルMIMEサポート |
| RFC 2048 | MIME パート4: 登録手続き | フルMIMEサポート |
| RFC 2049 | MIME パート5: 適合基準と例 | フルMIMEサポート |
メールフォーマット標準は、メールメッセージの構造、エンコード、表示方法を定義します。
フォーマット標準のサポート
| 標準 | RFC | 状態 | 説明 |
|---|---|---|---|
| MIME | RFC 2045-2049 | ✅ サポート | マルチパーパスインターネットメール拡張 |
| SMTPUTF8 | RFC 6531 | ⚠️ 部分的 | 国際化されたメールアドレス |
| EAI | RFC 6530 | ⚠️ 部分的 | メールアドレス国際化 |
| メッセージフォーマット | RFC 5322 | ✅ サポート | インターネットメッセージフォーマット |
| MIMEセキュリティ | RFC 1847 | ✅ サポート | MIMEのセキュリティマルチパート |
MIME(マルチパーパスインターネットメール拡張)
MIMEは、メールに異なるコンテンツタイプ(テキスト、HTML、添付ファイルなど)を複数含めることを可能にします。
サポートされているMIME機能:
- マルチパートメッセージ(mixed、alternative、related)
- Content-Typeヘッダー
- Content-Transfer-Encoding(7bit、8bit、quoted-printable、base64)
- インライン画像と添付ファイル
- リッチHTMLコンテンツ
SMTPUTF8とメールアドレス国際化
Warning
SMTPUTF8のサポートは部分的です - すべての機能が完全に実装されているわけではありません。
SMTPUTF8 は、メールアドレスに非ASCII文字(例:用户@例え.jp)を含めることを可能にします。
現在の状況:
- ⚠️ 国際化メールアドレスの部分的サポート
- ✅ メッセージ本文のUTF-8コンテンツ対応
- ⚠️ 非ASCIIローカルパートの限定的サポート
カレンダーおよび連絡先プロトコル
Note
Forward Email はカレンダーおよび連絡先の同期のために完全な CalDAV と CardDAV サポートを提供します。
Forward Email は caldav-adapter ライブラリを通じて CalDAV と CardDAV をサポートしています:
| RFC | タイトル | 状態 | 実装ノート |
|---|---|---|---|
| RFC 4791 | WebDAV のカレンダー拡張 (CalDAV) | ✅ 対応済み | カレンダーのアクセスおよび管理 |
| RFC 6352 | CardDAV: WebDAV の vCard 拡張 | ✅ 対応済み | 連絡先のアクセスおよび管理 |
| RFC 5545 | インターネットカレンダーおよびスケジューリングコアオブジェクト仕様 (iCalendar) | ✅ 対応済み | iCalendar フォーマット対応 |
| RFC 6350 | vCard フォーマット仕様 | ✅ 対応済み | vCard 4.0 フォーマット対応 |
| RFC 6638 | CalDAV のスケジューリング拡張 | ✅ 対応済み | iMIP 対応の CalDAV スケジューリング。詳細は commit c4d1629 を参照 |
| RFC 5546 | iCalendar トランスポート非依存相互運用プロトコル (iTIP) | ✅ 対応済み | REQUEST、REPLY、CANCEL、VFREEBUSY メソッドの iTIP 対応。詳細は commit c4d1629 を参照 |
| RFC 6047 | iCalendar メッセージベース相互運用プロトコル (iMIP) | ✅ 対応済み | 返信リンク付きのメールベースカレンダー招待。詳細は commit c4d1629 を参照 |
CalDAV と CardDAV は、カレンダーおよび連絡先データをデバイス間でアクセス、共有、同期するためのプロトコルです。
CalDAV と CardDAV のサポート
| プロトコル | RFC | 状態 | 説明 |
|---|---|---|---|
| CalDAV | RFC 4791 | ✅ 対応済み | カレンダーのアクセスおよび同期 |
| CardDAV | RFC 6352 | ✅ 対応済み | 連絡先のアクセスおよび同期 |
| iCalendar | RFC 5545 | ✅ 対応済み | カレンダーデータフォーマット |
| vCard | RFC 6350 | ✅ 対応済み | 連絡先データフォーマット |
| VTODO | RFC 5545 | ✅ 対応済み | タスク/リマインダーのサポート |
| CalDAV Scheduling | RFC 6638 | ✅ 対応済み | カレンダースケジューリング拡張 |
| iTIP | RFC 5546 | ✅ 対応済み | トランスポート非依存の相互運用性 |
| iMIP | RFC 6047 | ✅ 対応済み | メールベースのカレンダー招待 |
CalDAV (カレンダーアクセス)
CalDAV は、任意のデバイスやアプリケーションからカレンダーにアクセスし管理することを可能にします。
主な機能:
- 複数デバイス間の同期
- 共有カレンダー
- カレンダー購読
- イベント招待と応答
- 繰り返しイベント
- タイムゾーン対応
対応クライアント:
- Apple カレンダー (macOS, iOS)
- Mozilla Thunderbird
- Evolution
- GNOME カレンダー
- 任意の CalDAV 対応クライアント
CardDAV (連絡先アクセス)
CardDAV は、任意のデバイスやアプリケーションから連絡先にアクセスし管理することを可能にします。
主な機能:
- 複数デバイス間の同期
- 共有アドレス帳
- 連絡先グループ
- 写真対応
- カスタムフィールド
- vCard 4.0 対応
対応クライアント:
- Apple 連絡先 (macOS, iOS)
- Mozilla Thunderbird
- Evolution
- GNOME 連絡先
- 任意の CardDAV 対応クライアント
タスクとリマインダー (CalDAV VTODO)
Tip
Forward Email は CalDAV VTODO を通じてタスクとリマインダーをサポートしています。
VTODO は iCalendar フォーマットの一部で、CalDAV を通じたタスク管理を可能にします。
主な機能:
- タスクの作成と管理
- 期限日と優先度
- タスク完了の追跡
- 繰り返しタスク
- タスクリスト/カテゴリ
対応クライアント:
- Apple リマインダー (macOS, iOS)
- Mozilla Thunderbird (Lightning 付き)
- Evolution
- GNOME To Do
- VTODO 対応の任意の CalDAV クライアント
CalDAV/CardDAV 同期フロー
サポートされていないカレンダー拡張機能
以下のカレンダー拡張機能はサポートされていません:
| RFC | タイトル | 理由 |
|---|---|---|
| RFC 4918 | Web分散作成およびバージョニングのためのHTTP拡張 (WebDAV) | CalDAV は WebDAV の概念を使用しますが、RFC 4918 全体は実装していません |
| RFC 6578 | WebDAV のコレクション同期 | 実装されていません |
| RFC 3744 | WebDAV アクセス制御プロトコル | 実装されていません |
メールメッセージフィルタリング
Important
Forward Email はサーバーサイドのメールフィルタリングに対して 完全な Sieve および ManageSieve サポート を提供します。強力なルールを作成して、受信メッセージを自動的に仕分け、フィルタリング、転送、応答できます。
Sieve (RFC 5228)
Sieve は、サーバーサイドのメールフィルタリングのための標準化された強力なスクリプト言語です。Forward Email は 24 の拡張機能を備えた包括的な Sieve サポートを実装しています。
ソースコード: helpers/sieve/
サポートされているコア Sieve RFC
| RFC | タイトル | ステータス |
|---|---|---|
| RFC 5228 | Sieve: メールフィルタリング言語 | ✅ 完全サポート |
| RFC 5429 | Sieve メールフィルタリング: 拒否および拡張拒否拡張 | ✅ 完全サポート |
| RFC 5230 | Sieve メールフィルタリング: バケーション拡張 | ✅ 完全サポート |
| RFC 6131 | Sieve バケーション拡張: "Seconds" パラメータ | ✅ 完全サポート |
| RFC 5232 | Sieve メールフィルタリング: Imap4flags 拡張 | ✅ 完全サポート |
| RFC 5173 | Sieve メールフィルタリング: 本文拡張 | ✅ 完全サポート |
| RFC 5229 | Sieve メールフィルタリング: 変数拡張 | ✅ 完全サポート |
| RFC 5231 | Sieve メールフィルタリング: 関係拡張 | ✅ 完全サポート |
| RFC 4790 | インターネットアプリケーションプロトコル照合レジストリ | ✅ 完全サポート |
| RFC 3894 | Sieve 拡張: 副作用なしのコピー | ✅ 完全サポート |
| RFC 5293 | Sieve メールフィルタリング: Editheader 拡張 | ✅ 完全サポート |
| RFC 5260 | Sieve メールフィルタリング: 日付およびインデックス拡張 | ✅ 完全サポート |
| RFC 5435 | Sieve メールフィルタリング: 通知のための拡張 | ✅ 完全サポート |
| RFC 5183 | Sieve メールフィルタリング: 環境拡張 | ✅ 完全サポート |
| RFC 5490 | Sieve メールフィルタリング: メールボックス状態チェック拡張 | ✅ 完全サポート |
| RFC 8579 | Sieve メールフィルタリング: 特殊用途メールボックスへの配信 | ✅ 完全サポート |
| RFC 7352 | Sieve メールフィルタリング: 重複配信の検出 | ✅ 完全サポート |
| RFC 5463 | Sieve メールフィルタリング: Ihave 拡張 | ✅ 完全サポート |
| RFC 5233 | Sieve メールフィルタリング: サブアドレス拡張 | ✅ 完全サポート |
| draft-ietf-sieve-regex | Sieve メールフィルタリング: 正規表現拡張 | ✅ 完全サポート |
サポートされているSieve拡張機能
| 拡張機能 | 説明 | 統合 |
|---|---|---|
fileinto |
メッセージを特定のフォルダーに振り分ける | 指定されたIMAPフォルダーにメッセージを保存 |
reject / ereject |
エラーでメッセージを拒否する | バウンスメッセージ付きのSMTP拒否 |
vacation |
自動応答(休暇/不在通知) | Emails.queue経由でキューイング、レート制限あり |
vacation-seconds |
細かい休暇応答間隔の指定 | :secondsパラメータからTTLを取得 |
imap4flags |
IMAPフラグの設定(\Seen、\Flaggedなど) | メッセージ保存時にフラグを適用 |
envelope |
エンベロープの送信者/受信者をテスト | SMTPエンベロープデータへのアクセス |
body |
メッセージ本文の内容をテスト | 本文全体のテキストマッチング |
variables |
スクリプト内で変数を保存・使用 | 修飾子付きの変数展開 |
relational |
関係演算子による比較 | :count、 :value とgt/lt/eq |
comparator-i;ascii-numeric |
数値比較 | 数値文字列の比較 |
copy |
リダイレクト時にメッセージをコピー | fileinto/redirectでの:copyフラグ |
editheader |
メッセージヘッダーの追加・削除 | 保存前にヘッダーを修正 |
date |
日付/時刻の値をテスト | currentdateおよびヘッダーの日付テスト |
index |
特定のヘッダーの出現回数にアクセス | 複数値ヘッダーに対する:index |
regex |
正規表現マッチング | テストでの完全な正規表現サポート |
enotify |
通知の送信 | Emails.queue経由のmailto:通知 |
environment |
環境情報へのアクセス | セッションからドメイン、ホスト、リモートIPを取得 |
mailbox |
メールボックスの存在をテスト | mailboxexistsテスト |
special-use |
特殊用途メールボックスへの振り分け | \Junk、\Trashなどをフォルダーにマッピング |
duplicate |
重複メッセージの検出 | Redisベースの重複追跡 |
ihave |
拡張機能の利用可能性をテスト | 実行時の機能チェック |
subaddress |
user+detail形式のアドレス部分にアクセス | :userおよび:detailアドレス部分 |
サポートされていないSieve拡張機能
| 拡張機能 | RFC | 理由 |
|---|---|---|
include |
RFC 6609 | セキュリティリスク(スクリプトインジェクション)、グローバルスクリプト保存が必要 |
mboxmetadata / servermetadata |
RFC 5490 | IMAP METADATA拡張が必要 |
fcc |
RFC 8580 | 送信済みフォルダーとの統合が必要 |
encoded-character |
RFC 5228 | ${hex:}構文のためにパーサーの変更が必要 |
foreverypart / mime / extracttext |
RFC 5703 | 複雑なMIMEツリーの操作が必要 |
Sieve処理フロー
セキュリティ機能
Forward EmailのSieve実装には包括的なセキュリティ保護が含まれています:
- CVE-2023-26430保護:リダイレクトループやメール爆撃攻撃を防止
- レート制限:リダイレクト(10通/メッセージ、100通/日)および休暇返信の制限
- 拒否リストチェック:リダイレクト先アドレスを拒否リストと照合
- 保護されたヘッダー:DKIM、ARC、および認証ヘッダーはeditheaderで変更不可
- スクリプトサイズ制限:最大スクリプトサイズを強制
- 実行タイムアウト:実行時間が制限を超えた場合にスクリプトを終了
例:Sieveスクリプト
ニュースレターをフォルダに振り分ける:
require ["fileinto"];
if header :contains "List-Id" "newsletter" {
fileinto "Newsletters";
}
細かいタイミング設定の休暇自動応答:
require ["vacation", "vacation-seconds"];
vacation :seconds 3600 :subject "Out of Office"
"現在不在のため、24時間以内に返信いたします。";
フラグ付きスパムフィルタリング:
require ["fileinto", "imap4flags"];
if header :contains "X-Spam-Status" "Yes" {
setflag "\\Seen";
fileinto "Junk";
}
変数を使った複雑なフィルタリング:
require ["variables", "fileinto", "regex"];
if header :regex "From" "(.+)@example\\.com" {
set :lower "sender" "${1}";
fileinto "Contacts/${sender}";
}
Tip
完全なドキュメント、例スクリプト、設定手順については、FAQ: Do you support Sieve email filtering? をご覧ください
ManageSieve (RFC 5804)
Forward EmailはSieveスクリプトをリモート管理するためのManageSieveプロトコルを完全にサポートしています。
ソースコード: managesieve-server.js
| RFC | タイトル | ステータス |
|---|---|---|
| RFC 5804 | Sieveスクリプトをリモート管理するためのプロトコル | ✅ フルサポート |
ManageSieveサーバー設定
| 設定項目 | 値 |
|---|---|
| サーバー | imap.forwardemail.net |
| ポート (STARTTLS) | 2190 (推奨) |
| ポート (Implicit TLS) | 4190 |
| 認証方式 | PLAIN (TLS上で) |
注意: ポート2190はSTARTTLS(平文からTLSへのアップグレード)を使用し、sieve-connectを含むほとんどのManageSieveクライアントと互換性があります。ポート4190は暗黙のTLS(接続開始時からTLS)を使用し、それをサポートするクライアント向けです。
対応ManageSieveコマンド
| コマンド | 説明 |
|---|---|
AUTHENTICATE |
PLAINメカニズムによる認証 |
CAPABILITY |
サーバーの機能および拡張機能の一覧表示 |
HAVESPACE |
スクリプトを保存可能か確認 |
PUTSCRIPT |
新しいスクリプトをアップロード |
LISTSCRIPTS |
すべてのスクリプトとアクティブ状態の一覧 |
SETACTIVE |
スクリプトをアクティブ化 |
GETSCRIPT |
スクリプトをダウンロード |
DELETESCRIPT |
スクリプトを削除 |
RENAMESCRIPT |
スクリプトの名前変更 |
CHECKSCRIPT |
スクリプトの構文検証 |
NOOP |
接続を維持 |
LOGOUT |
セッション終了 |
対応ManageSieveクライアント
- Thunderbird: Sieveアドオンによる組み込みSieveサポート
- Roundcube: ManageSieveプラグイン
- KMail: ネイティブManageSieveサポート
- sieve-connect: コマンドラインクライアント
- RFC 5804準拠の任意のクライアント
ManageSieveプロトコルフロー
WebインターフェースとAPI
ManageSieveに加えて、Forward Emailは以下を提供します:
- Webダッシュボード: My Account → Domains → Aliases → Sieve Scriptsでウェブインターフェースを通じてSieveスクリプトの作成と管理が可能
- REST API: Forward Email APIを通じたプログラムによるSieveスクリプト管理アクセス
Tip
詳細なセットアップ手順とクライアント設定については、FAQ: Sieveメールフィルタリングをサポートしていますか?をご覧ください
ストレージ最適化
Important
業界初のストレージ技術: Forward Emailは、添付ファイルの重複排除とメールコンテンツのBrotli圧縮を組み合わせた世界唯一のメールプロバイダーです。この二重の最適化により、従来のメールプロバイダーと比べて2~3倍の効果的なストレージを実現しています。
Forward Emailは、RFC準拠とメッセージの完全性を維持しつつ、メールボックスサイズを劇的に削減する2つの革新的なストレージ最適化技術を実装しています:
- 添付ファイルの重複排除 - すべてのメール間で重複する添付ファイルを排除
- Brotli圧縮 - メタデータを46~86%、添付ファイルを50%削減
アーキテクチャ:二重層ストレージ最適化
添付ファイルの重複排除
Forward Emailは、WildDuckの実績ある手法をSQLiteストレージ向けに適用した添付ファイルの重複排除を実装しています。
Note
重複排除の対象: 「添付ファイル」とは、デコードされたファイルではなく、エンコードされたMIMEノードの内容(base64またはquoted-printable)を指します。これによりDKIMおよびGPG署名の有効性が保持されます。
動作原理
WildDuckのオリジナル実装(MongoDB GridFS):
Wild Duck IMAPサーバーは添付ファイルを重複排除します。この場合の「添付ファイル」とは、base64またはquoted-printableでエンコードされたmimeノードの内容を指し、デコードされたファイルではありません。エンコードされた内容を使用することで多くの偽陰性(異なるメール内の同一ファイルが異なる添付ファイルとしてカウントされる)が発生しますが、これは異なる署名方式(DKIM、GPGなど)の有効性を保証するために必要です。Wild Duckから取得したメッセージは、メッセージをツリー状のオブジェクトに解析し取得時に再構築しているにもかかわらず、保存されたメッセージとまったく同じに見えます。 Forward EmailのSQLite実装:
Forward Emailは暗号化されたSQLiteストレージに対して以下のプロセスでこのアプローチを適用しています:
- ハッシュ計算: 添付ファイルが見つかった場合、添付ファイルの本文から
rev-hashライブラリを使ってハッシュを計算します - 照会:
Attachmentsテーブルに一致するハッシュの添付ファイルが存在するか確認します - 参照カウント:
- 存在する場合: 参照カウンターを1増やし、マジックカウンターをランダムな数だけ増やします
- 新規の場合: カウンター=1で新しい添付ファイルエントリを作成します
- 削除の安全性: 偽陽性を防ぐために二重カウンターシステム(参照+マジック)を使用します
- ガベージコレクション: 両方のカウンターがゼロになった時点で添付ファイルは即座に削除されます
ソースコード: helpers/attachment-storage.js
重複排除フロー
マジックナンバーシステム
Forward EmailはWildDuckの「マジックナンバー」システム(Mail.ruに触発)を使用して削除時の偽陽性を防いでいます:
- すべてのメッセージにランダムな数値が割り当てられます
- メッセージが追加されると添付ファイルのマジックカウンターはそのランダム数だけ増加します
- メッセージが削除されると同じ数だけマジックカウンターは減少します
- 添付ファイルは両方のカウンター(参照+マジック)がゼロになった時のみ削除されます
この二重カウンターシステムにより、削除時に問題が発生した場合(例:クラッシュ、ネットワークエラー)でも添付ファイルが早期に削除されることを防ぎます。
主な違い: WildDuck vs Forward Email
| 機能 | WildDuck (MongoDB) | Forward Email (SQLite) |
|---|---|---|
| ストレージバックエンド | MongoDB GridFS(チャンク化) | SQLite BLOB(直接) |
| ハッシュアルゴリズム | SHA256 | rev-hash(SHA-256ベース) |
| 参照カウント | ✅ あり | ✅ あり |
| マジックナンバー | ✅ あり(Mail.ru由来) | ✅ あり(同じシステム) |
| ガベージコレクション | 遅延(別ジョブ) | 即時(カウンターゼロ時) |
| 圧縮 | ❌ なし | ✅ Brotli(以下参照) |
| 暗号化 | ❌ 任意 | ✅ 常時(ChaCha20-Poly1305) |
Brotli圧縮
Important
世界初: Forward EmailはメールコンテンツにBrotli圧縮を使用する世界で唯一のメールサービスです。これにより添付ファイルの重複排除に加えて46-86%のストレージ節約が可能になります。
Forward Emailは添付ファイル本文とメッセージメタデータの両方にBrotli圧縮を実装し、大幅なストレージ節約を実現しつつ後方互換性を維持しています。
実装: helpers/msgpack-helpers.js
圧縮対象
1. 添付ファイル本文 (encodeAttachmentBody)
- 旧フォーマット: 16進エンコードされた文字列(サイズ2倍)または生のBuffer
- 新フォーマット: "FEBR"マジックヘッダー付きのBrotli圧縮Buffer
- 圧縮判定: 4バイトのヘッダーを考慮し、圧縮でサイズが小さくなる場合のみ圧縮
- ストレージ節約: 最大50%(16進→ネイティブBLOB)
2. メッセージメタデータ (
encodeMetadata)
含まれるもの: mimeTree、headers、envelope、flags
- 旧フォーマット: JSONテキスト文字列
- 新フォーマット: Brotli圧縮されたBuffer
- ストレージ節約率: メッセージの複雑さにより46-86%
圧縮設定
// 速度最適化されたBrotli圧縮オプション(レベル4はバランスが良い)
const BROTLI_COMPRESS_OPTIONS = {
params: {
[zlib.constants.BROTLI_PARAM_QUALITY]: 4
}
};
なぜレベル4?
- 高速な圧縮/解凍: ミリ秒未満の処理時間
- 良好な圧縮率: 46-86%の節約
- バランスの取れた性能: リアルタイムメール処理に最適
マジックヘッダー: "FEBR"
Forward Emailは圧縮された添付ファイルの本文を識別するために4バイトのマジックヘッダーを使用します:
"FEBR" = Forward Email BRotli
16進数: 0x46 0x45 0x42 0x52
なぜマジックヘッダー?
- フォーマット検出: 圧縮データか非圧縮データかを即座に識別
- 後方互換性: 古い16進文字列や生のBufferも動作
- 衝突回避: "FEBR"は正当な添付データの先頭に現れる可能性が低い
圧縮プロセス
解凍プロセス
後方互換性
すべてのデコード関数はストレージフォーマットを自動検出します:
| フォーマット | 検出方法 | 処理内容 |
|---|---|---|
| Brotli圧縮 | "FEBR"マジックヘッダーの有無確認 | zlib.brotliDecompressSync()で解凍 |
| 生のBuffer | マジックなしでBuffer.isBuffer() |
そのまま返す |
| 16進文字列 | 偶数長かつ[0-9a-f]文字の確認 | Buffer.from(value, 'hex')でデコード |
| JSON文字列 | 最初の文字が{または[か確認 |
JSON.parse()で解析 |
これにより、旧フォーマットから新フォーマットへの移行時にデータ損失ゼロを保証します。
ストレージ節約統計
本番データからの測定節約率:
| データタイプ | 旧フォーマット | 新フォーマット | 節約率 |
|---|---|---|---|
| 添付ファイル本文 | 16進エンコード文字列(2倍) | Brotli圧縮BLOB | 50% |
| メッセージメタデータ | JSONテキスト | Brotli圧縮BLOB | 46-86% |
| メールボックスフラグ | JSONテキスト | Brotli圧縮BLOB | 60-80% |
出典: helpers/migrate-storage-format.js
移行プロセス
Forward Emailは旧フォーマットから新フォーマットへの自動かつ冪等な移行を提供します: // 移行統計の追跡: { attachmentsMigrated: 0, messagesMigrated: 0, mailboxesMigrated: 0, bytesSaved: 0 // 圧縮によって節約された合計バイト数 }
**移行手順:**
1. 添付ファイルの本文: 16進エンコード → ネイティブBLOB(50%節約)
2. メッセージメタデータ: JSONテキスト → Brotli圧縮BLOB(46-86%節約)
3. メールボックスフラグ: JSONテキスト → Brotli圧縮BLOB(60-80%節約)
**ソース:** [`helpers/migrate-storage-format.js`](https://github.com/forwardemail/forwardemail.net/blob/master/helpers/migrate-storage-format.js)
---
### 統合ストレージ効率 {#combined-storage-efficiency}
> \[!TIP]
> **実際の効果:** 添付ファイルの重複排除+Brotli圧縮により、Forward Emailユーザーは従来のメールプロバイダーと比べて**2〜3倍の実効ストレージ**を得られます。
**例示シナリオ:**
従来のメールプロバイダー(1GBメールボックス):
* 1GBのディスク容量 = 1GBのメール
* 重複排除なし: 同じ添付ファイルが10回保存される = 10倍のストレージ無駄遣い
* 圧縮なし: フルJSONメタデータ保存 = 2〜3倍のストレージ無駄遣い
Forward Email(1GBメールボックス):
* 1GBのディスク容量 ≈ **2〜3GBのメール**(実効ストレージ)
* 重複排除: 同じ添付ファイルは1回保存し、10回参照
* 圧縮: メタデータで46〜86%節約、添付ファイルで50%節約
* 暗号化: ChaCha20-Poly1305(ストレージオーバーヘッドなし)
**比較表:**
| プロバイダー | ストレージ技術 | 実効ストレージ(1GBメールボックス) |
| ----------------- | -------------------------------------------- | ------------------------------- |
| Gmail | なし | 1GB |
| iCloud | なし | 1GB |
| Outlook.com | なし | 1GB |
| Fastmail | なし | 1GB |
| ProtonMail | 暗号化のみ | 1GB |
| Tutanota | 暗号化のみ | 1GB |
| **Forward Email** | **重複排除+圧縮+暗号化** | **2〜3GB** ✨ |
### 技術的実装詳細 {#technical-implementation-details}
**パフォーマンス:**
* Brotliレベル4: サブミリ秒の圧縮/解凍
* 圧縮によるパフォーマンスペナルティなし
* SQLite FTS5: NVMe SSDで50ms未満の検索
**セキュリティ:**
* 圧縮は**暗号化後**に実施(SQLiteデータベースは暗号化済み)
* ChaCha20-Poly1305暗号化+Brotli圧縮
* ゼロ知識: 復号パスワードはユーザーのみが保持
**RFC準拠:**
* 取得したメッセージは保存時と**全く同じ**
* DKIM署名は有効なまま(エンコードされた内容を保持)
* GPG署名は有効なまま(署名対象の内容は変更なし)
### なぜ他のプロバイダーはこれをしないのか {#why-no-other-provider-does-this}
**複雑さ:**
* ストレージ層との深い統合が必要
* 後方互換性の確保が困難
* 古いフォーマットからの移行が複雑
**パフォーマンスの懸念:**
* 圧縮はCPU負荷を増やす(Brotliレベル4で解決)
* 読み込みごとの解凍(SQLiteのキャッシュで解決)
**Forward Emailの強み:**
* 最初から最適化を念頭に設計
* SQLiteは直接BLOB操作を可能にする
* ユーザーごとに暗号化されたデータベースで安全な圧縮を実現
---
---
## モダンな機能 {#modern-features}
## メール管理のための完全なREST API {#complete-rest-api-for-email-management}
> \[!TIP]
> Forward Emailはプログラムによるメール管理のために39のエンドポイントを持つ包括的なREST APIを提供しています。
> \[!TIP]
> **業界唯一の特徴:** 他のどのメールサービスとも異なり、Forward Emailはメールボックス、カレンダー、連絡先、メッセージ、フォルダへの完全なプログラムアクセスを包括的なREST APIを通じて提供します。これは、すべてのデータを格納する暗号化されたSQLiteデータベースファイルへの直接操作です。
Forward Emailは、メールデータへの前例のないアクセスを提供する完全なREST APIを提供します。Gmail、iCloud、Outlook、ProtonMail、Tuta、Fastmailを含む他のどのメールサービスも、このレベルの包括的で直接的なデータベースアクセスを提供していません。
**APIドキュメント:** <https://forwardemail.net/en/email-api>
### APIカテゴリ(39エンドポイント) {#api-categories-39-endpoints}
**1. メッセージAPI**(5エンドポイント) - メールメッセージの完全なCRUD操作:
* `GET /v1/messages` - 15以上の高度な検索パラメータでメッセージを一覧表示(他のサービスにはない機能)
* `POST /v1/messages` - メッセージの作成/送信
* `GET /v1/messages/:id` - メッセージの取得
* `PUT /v1/messages/:id` - メッセージの更新(フラグ、フォルダ)
* `DELETE /v1/messages/:id` - メッセージの削除
*例:添付ファイル付きの前四半期のすべての請求書を検索する場合:*
```bash
curl -u "alias@domain.com:password" \
"https://api.forwardemail.net/v1/messages?q=subject:invoice+has:attachment+after:2024-01-01+before:2024-04-01"
高度な検索ドキュメントを参照してください
2. フォルダAPI(5エンドポイント) - REST経由の完全なIMAPフォルダ管理:
GET /v1/folders- すべてのフォルダを一覧表示POST /v1/folders- フォルダを作成GET /v1/folders/:id- フォルダを取得PUT /v1/folders/:id- フォルダを更新DELETE /v1/folders/:id- フォルダを削除
3. 連絡先API(5エンドポイント) - REST経由のCardDAV連絡先ストレージ:
GET /v1/contacts- 連絡先を一覧表示POST /v1/contacts- 連絡先を作成(vCard形式)GET /v1/contacts/:id- 連絡先を取得PUT /v1/contacts/:id- 連絡先を更新DELETE /v1/contacts/:id- 連絡先を削除
4. カレンダーAPI(5エンドポイント) - カレンダーコンテナ管理:
GET /v1/calendars- カレンダーコンテナを一覧表示POST /v1/calendars- カレンダーを作成(例:「仕事用カレンダー」、「個人用カレンダー」)GET /v1/calendars/:id- カレンダーを取得PUT /v1/calendars/:id- カレンダーを更新DELETE /v1/calendars/:id- カレンダーを削除
5. カレンダーイベントAPI(5エンドポイント) - カレンダー内のイベントスケジューリング:
GET /v1/calendar-events- イベントを一覧表示POST /v1/calendar-events- 参加者付きイベントを作成GET /v1/calendar-events/:id- イベントを取得PUT /v1/calendar-events/:id- イベントを更新DELETE /v1/calendar-events/:id- イベントを削除
例:カレンダーイベントを作成する場合:
curl -u "alias@domain.com:password" \
-X POST \
-H "Content-Type: application/json" \
-d '{"title":"チームミーティング","start":"2024-12-20T10:00:00Z","attendees":["team@example.com"],"calendar_id":"calendar123"}' \
https://api.forwardemail.net/v1/calendar-events
技術的詳細
- 認証: シンプルな
alias:password認証(OAuthの複雑さなし) - パフォーマンス: SQLite FTS5 と NVMe SSD ストレージによる50ms未満の応答時間
- ゼロネットワーク遅延: 外部サービスを経由しない直接データベースアクセス
実際のユースケース
-
メール分析: メール量、応答時間、送信者統計を追跡するカスタムダッシュボードの構築
-
自動化ワークフロー: メール内容に基づくアクションのトリガー(請求書処理、サポートチケット)
-
CRM連携: メール会話をCRMと自動同期
-
コンプライアンス&ディスカバリー: 法務・コンプライアンス要件のためのメール検索とエクスポート
-
カスタムメールクライアント: ワークフローに特化したメールインターフェースの構築
-
ビジネスインテリジェンス: 通信パターン、応答率、顧客エンゲージメントの分析
-
ドキュメント管理: 添付ファイルの自動抽出と分類
Forward Emailは、メールアカウント、ドメイン、エイリアス、メッセージを完全に制御できるモダンなREST APIを提供します。このAPIはJMAPの強力な代替手段であり、従来のメールプロトコルを超えた機能を提供します。
| カテゴリ | エンドポイント数 | 説明 |
|---|---|---|
| アカウント管理 | 8 | ユーザーアカウント、認証、設定 |
| ドメイン管理 | 12 | カスタムドメイン、DNS、検証 |
| エイリアス管理 | 6 | メールエイリアス、転送、キャッチオール |
| メッセージ管理 | 7 | メッセージの送受信、検索、削除 |
| カレンダー&連絡先 | 4 | CalDAV/CardDAVアクセスAPI |
| ログ&分析 | 2 | メールログ、配信レポート |
主要なAPI機能
高度な検索:
APIはGmailに似たクエリ構文を持つ強力な検索機能を提供します:
GET /v1/messages?q=subject:invoice+has:attachment+after:2024-01-01+before:2024-04-01
サポートされている検索演算子:
from:- 送信者で検索to:- 受信者で検索subject:- 件名で検索has:attachment- 添付ファイル付きメッセージis:unread- 未読メッセージis:starred- スター付きメッセージafter:- 指定日以降のメッセージbefore:- 指定日以前のメッセージlabel:- ラベル付きメッセージfilename:- 添付ファイル名
カレンダーイベント管理:
GET /v1/calendar-events
POST /v1/calendar-events
PUT /v1/calendar-events/:id
DELETE /v1/calendar-events/:id
Webhook統合:
APIはメールイベント(受信、送信、バウンスなど)のリアルタイム通知のためのWebhookをサポートします。
認証:
- APIキー認証
- OAuth 2.0対応
- レート制限: 1時間あたり1000リクエスト
データ形式:
- JSONリクエスト/レスポンス
- RESTful設計
- ページネーション対応
セキュリティ:
- HTTPSのみ
- APIキーのローテーション
- IPホワイトリスト(オプション)
- リクエスト署名(オプション)
APIアーキテクチャ
iOSプッシュ通知
Tip
Forward EmailはXAPPLEPUSHSERVICEを通じてネイティブのiOSプッシュ通知をサポートし、即時のメール配信を実現します。
Important
ユニークな特徴: Forward Emailは、メール、連絡先、カレンダーのネイティブiOSプッシュ通知をXAPPLEPUSHSERVICE IMAP拡張でサポートする数少ないオープンソースメールサーバーの一つです。これはAppleのプロトコルをリバースエンジニアリングしており、バッテリー消費なしにiOSデバイスへ即時配信を提供します。
Forward EmailはApple独自のXAPPLEPUSHSERVICE拡張を実装し、バックグラウンドポーリングを必要とせずiOSデバイス向けのネイティブプッシュ通知を提供します。
動作原理
XAPPLEPUSHSERVICEは非標準のIMAP拡張で、新着メール到着時にiOSのメールアプリが即時プッシュ通知を受け取ることを可能にします。
Forward EmailはIMAP向けのApple Push Notification service (APNs) 統合を実装しており、新着メール到着時にiOSメールアプリが即時プッシュ通知を受け取れます。
主な特徴
即時配信:
- プッシュ通知は数秒以内に届く
- バッテリーを消耗するバックグラウンドポーリングなし
- メールアプリが閉じていても動作
-
即時配信: メール、カレンダーイベント、連絡先がポーリングスケジュールではなく即座にiPhone/iPadに表示される
-
バッテリー効率: 常時IMAP接続を維持する代わりにAppleのプッシュインフラを利用
-
トピックベースプッシュ: INBOXだけでなく特定のメールボックス向けのプッシュ通知をサポート
-
サードパーティアプリ不要: ネイティブのiOSメール、カレンダー、連絡先アプリで動作 ネイティブ統合:
-
iOSメールアプリに組み込み済み
-
サードパーティアプリ不要
-
シームレスなユーザー体験
プライバシー重視:
- デバイストークンは暗号化されている
- メッセージ内容はAPNS経由で送信されない
- 「新着メール」通知のみ送信される
バッテリー効率:
- 常時IMAPポーリングなし
- 通知が届くまでデバイスはスリープ状態
- バッテリーへの影響は最小限
これが特別な理由
Important
ほとんどのメールプロバイダーはXAPPLEPUSHSERVICEをサポートしておらず、iOSデバイスは15分ごとに新着メールをポーリングする必要があります。
ほとんどのオープンソースメールサーバー(Dovecot、Postfix、Cyrus IMAPを含む)はiOSプッシュ通知をサポートしていません。ユーザーは以下のいずれかを選択する必要があります:
- IMAP IDLEを使用(接続を維持し、バッテリーを消耗)
- ポーリングを使用(15〜30分ごとにチェック、通知が遅延)
- 独自のプッシュインフラを持つ専用メールアプリを使用
Forward EmailはGmail、iCloud、Fastmailなどの商用サービスと同様の即時プッシュ通知体験を提供します。
他プロバイダーとの比較:
| プロバイダー | プッシュ対応 | ポーリング間隔 | バッテリー影響 |
|---|---|---|---|
| Forward Email | ✅ ネイティブプッシュ | 即時 | 最小限 |
| Gmail | ✅ ネイティブプッシュ | 即時 | 最小限 |
| iCloud | ✅ ネイティブプッシュ | 即時 | 最小限 |
| Yahoo | ✅ ネイティブプッシュ | 即時 | 最小限 |
| Outlook.com | ❌ ポーリング | 15分 | 中程度 |
| Fastmail | ❌ ポーリング | 15分 | 中程度 |
| ProtonMail | ⚠️ ブリッジのみ | ブリッジ経由 | 高い |
| Tutanota | ❌ アプリのみ | 該当なし | 該当なし |
実装の詳細
IMAP CAPABILITYレスポンス:
* CAPABILITY IMAP4rev1 ... XAPPLEPUSHSERVICE ...
登録プロセス:
- iOSメールアプリがXAPPLEPUSHSERVICE機能を検出
- アプリがForward Emailにデバイストークンを登録
- Forward Emailがトークンを保存しアカウントに紐付け
- 新着メール到着時にForward EmailがAPNS経由でプッシュ送信
- iOSがメールアプリを起動し新着メッセージを取得
セキュリティ:
- デバイストークンは保存時に暗号化
- トークンは期限切れとなり自動更新される
- メッセージ内容はAPNSに公開されない
- エンドツーエンド暗号化を維持
- IMAP拡張:
XAPPLEPUSHSERVICE - ソースコード: WildDuck Issue #711
- セットアップ: 自動 - 設定不要でiOSメールアプリで即利用可能
他サービスとの比較
| サービス | iOSプッシュ対応 | 方法 |
|---|---|---|
| Forward Email | ✅ 対応 | XAPPLEPUSHSERVICE(リバースエンジニアリング) |
| Gmail | ✅ 対応 | 独自Gmailアプリ+Googleプッシュ |
| iCloud Mail | ✅ 対応 | Apple純正統合 |
| Outlook.com | ✅ 対応 | 独自Outlookアプリ+Microsoftプッシュ |
| Fastmail | ✅ 対応 | XAPPLEPUSHSERVICE |
| Dovecot | ❌ 非対応 | IMAP IDLEまたはポーリングのみ |
| Postfix | ❌ 非対応 | IMAP IDLEまたはポーリングのみ |
| Cyrus IMAP | ❌ 非対応 | IMAP IDLEまたはポーリングのみ |
Gmailプッシュ:
GmailはGmailアプリ専用の独自プッシュシステムを使用。iOSメールアプリはGmailのIMAPサーバーをポーリングする必要があります。
iCloudプッシュ:
iCloudはForward Emailと同様のネイティブプッシュをサポートしていますが、@icloud.comアドレスのみ対応です。
Outlook.comはXAPPLEPUSHSERVICEをサポートしておらず、iOSメールは15分ごとにポーリングします。
Fastmail:
FastmailはXAPPLEPUSHSERVICEをサポートしていません。プッシュ通知にはFastmailアプリを使用するか、15分間隔のポーリング遅延を受け入れる必要があります。
テストと検証
プロトコル機能テスト
Note
このセクションでは、2026年1月22日に実施した最新のプロトコル機能テストの結果を提供します。
このセクションには、テスト対象のすべてのプロバイダーからの実際のCAPABILITY/CAPA/EHLO応答が含まれています。すべてのテストは2026年1月22日に実施されました。
これらのテストは、主要プロバイダー間でのさまざまなメールプロトコルおよび拡張機能の広告されたサポートと実際のサポートを検証するのに役立ちます。
Test Methodology
テスト環境:
- 日付: 2026年1月22日 02:37 UTC
- 場所: AWS EC2インスタンス
- IPv4: 54.167.216.197
- IPv6: 2600:4040:46da:9a00:b19e:3ad4:426c:2f48
- ツール: OpenSSL s_client、bashスクリプト
テスト対象プロバイダー:
- Forward Email
- Gmail
- Outlook.com
- iCloud
- Fastmail
- Yahoo/AOL (Verizon)
Test Scripts
完全な透明性のために、これらのテストに使用された正確なスクリプトを以下に示します。
IMAP Capability Test Script
#!/bin/bash
# IMAP Capability Test Script
# Tests IMAP CAPABILITY for various email providers
echo "========================================="
echo "IMAP CAPABILITY TEST"
echo "Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")"
echo "========================================="
echo ""
# Gmail
echo "--- Gmail (imap.gmail.com:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect imap.gmail.com:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
# Outlook.com
echo "--- Outlook.com (outlook.office365.com:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect outlook.office365.com:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
# iCloud
echo "--- iCloud (imap.mail.me.com:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect imap.mail.me.com:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
# Fastmail
echo "--- Fastmail (imap.fastmail.com:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect imap.fastmail.com:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
# Yahoo
echo "--- Yahoo (imap.mail.yahoo.com:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect imap.mail.yahoo.com:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
# Forward Email
echo "--- Forward Email (imap.forwardemail.net:993) ---"
echo -e "a001 CAPABILITY\na002 LOGOUT" | timeout 10 openssl s_client -connect imap.forwardemail.net:993 -crlf -quiet 2>&1 | grep -A 20 "CAPABILITY"
echo ""
echo "========================================="
echo "Test completed"
echo "========================================="
POP3 Capability Test Script
#!/bin/bash
# POP3 Capability Test Script
# Tests POP3 CAPA for various email providers
echo "========================================="
echo "POP3 CAPABILITY TEST"
echo "Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")"
echo "========================================="
echo ""
# Gmail
echo "--- Gmail (pop.gmail.com:995) ---"
echo -e "CAPA\nQUIT" | timeout 10 openssl s_client -connect pop.gmail.com:995 -crlf -quiet 2>&1 | grep -A 20 "CAPA"
echo ""
# Outlook.com
echo "--- Outlook.com (outlook.office365.com:995) ---"
echo -e "CAPA\nQUIT" | timeout 10 openssl s_client -connect outlook.office365.com:995 -crlf -quiet 2>&1 | grep -A 20 "CAPA"
echo ""
# iCloud (Note: iCloud does not support POP3)
echo "--- iCloud (No POP3 support) ---"
echo "iCloudはPOP3をサポートしていません"
echo ""
# Fastmail
echo "--- Fastmail (pop.fastmail.com:995) ---"
echo -e "CAPA\nQUIT" | timeout 10 openssl s_client -connect pop.fastmail.com:995 -crlf -quiet 2>&1 | grep -A 20 "CAPA"
echo ""
# Yahoo
echo "--- Yahoo (pop.mail.yahoo.com:995) ---"
echo -e "CAPA\nQUIT" | timeout 10 openssl s_client -connect pop.mail.yahoo.com:995 -crlf -quiet 2>&1 | grep -A 20 "CAPA"
echo ""
# Forward Email
echo "--- Forward Email (pop3.forwardemail.net:995) ---"
echo -e "CAPA\nQUIT" | timeout 10 openssl s_client -connect pop3.forwardemail.net:995 -crlf -quiet 2>&1 | grep -A 20 "CAPA"
echo ""
echo "========================================="
echo "Test completed"
echo "========================================="
SMTP機能テストスクリプト
#!/bin/bash
# SMTP Capability Test Script
# Tests SMTP EHLO for various email providers
echo "========================================="
echo "SMTP CAPABILITY TEST"
echo "Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")"
echo "========================================="
echo ""
# Gmail
echo "--- Gmail (smtp.gmail.com:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.gmail.com:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
# Outlook.com
echo "--- Outlook.com (smtp.office365.com:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.office365.com:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
# iCloud
echo "--- iCloud (smtp.mail.me.com:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.mail.me.com:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
# Fastmail
echo "--- Fastmail (smtp.fastmail.com:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.fastmail.com:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
# Yahoo
echo "--- Yahoo (smtp.mail.yahoo.com:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.mail.yahoo.com:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
# Forward Email
echo "--- Forward Email (smtp.forwardemail.net:587) ---"
echo -e "EHLO test.com\nQUIT" | timeout 10 openssl s_client -connect smtp.forwardemail.net:587 -starttls smtp -crlf -quiet 2>&1 | grep -A 30 "250-"
echo ""
echo "========================================="
echo "Test completed"
echo "========================================="
テスト結果の概要
IMAP (CAPABILITY)
Forward Email
* CAPABILITY IMAP4rev1 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN CHILDREN ENABLE ID IDLE NAMESPACE QUOTA SASL-IR UNSELECT XLIST XAPPLEPUSHSERVICE
Gmail
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE ENABLE MOVE CONDSTORE ESEARCH UTF8=ACCEPT LIST-EXTENDED LIST-STATUS LITERAL- SPECIAL-USE
iCloud
* OK [CAPABILITY XAPPLEPUSHSERVICE IMAP4 IMAP4rev1 SASL-IR AUTH=ATOKEN AUTH=PLAIN AUTH=ATOKEN2 AUTH=XOAUTH2]
* CAPABILITY IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
Fastmail
* CAPABILITY IMAP4rev1 ACL ANNOTATE-EXPERIMENT-1 CATENATE CONDSTORE ENABLE ESEARCH ESORT I18NLEVEL=1 ID IDLE LIST-EXTENDED LIST-STATUS LITERAL+ LOGINDISABLED MULTIAPPEND NAMESPACE QRESYNC QUOTA RIGHTS=ektx SASL-IR SORT SPECIAL-USE THREAD=ORDEREDSUBJECT UIDPLUS UNSELECT WITHIN X-RENAME XLIST
Yahoo/AOL (Verizon)
* CAPABILITY IMAP4rev1 IDLE NAMESPACE QUOTA ID XLIST CHILDREN UIDPLUS MOVE CONDSTORE ESEARCH ENABLE LIST-EXTENDED LIST-STATUS LITERAL- SPECIAL-USE UNSELECT XAPPLEPUSHSERVICE
POP3 (CAPA)
Forward Email
+OK
CAPA
TOP
USER
UIDL
EXPIRE 30
IMPLEMENTATION ForwardEmail
.
Gmail
+OK
CAPA
TOP
USER
UIDL
EXPIRE 30
IMPLEMENTATION Gpop
.
+OK
CAPA
TOP
USER
UIDL
SASL PLAIN XOAUTH2
.
Fastmail
+OK
CAPA
TOP
USER
UIDL
EXPIRE 30
IMPLEMENTATION Cyrus
.
SMTP (EHLO)
Forward Email
250-smtp.forwardemail.net
250-PIPELINING
250-SIZE 52428800
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 CHUNKING
Gmail
250-smtp.gmail.com at your service
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
250-SN4PR13CA0005.outlook.office365.com Hello [x.x.x.x]
250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8
Fastmail
250-smtp.fastmail.com
250-PIPELINING
250-SIZE 78643200
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 CHUNKING
Yahoo/AOL (Verizon)
250-smtp.mail.yahoo.com
250-PIPELINING
250-SIZE 41943040
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-STARTTLS
詳細なテスト結果
IMAP テスト結果
Gmail:
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER
Outlook.com:
* CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
iCloud:
* CAPABILITY XAPPLEPUSHSERVICE IMAP4 IMAP4rev1 SASL-IR AUTH=ATOKEN AUTH=PLAIN AUTH=ATOKEN2 AUTH=XOAUTH2
Fastmail: 接続がタイムアウトしました。以下の注記を参照してください。
Yahoo:
* CAPABILITY IMAP4rev1 SASL-IR AUTH=PLAIN AUTH=XOAUTH2 AUTH=OAUTHBEARER ID MOVE NAMESPACE XYMHIGHESTMODSEQ UIDPLUS LITERAL+ CHILDREN UNSELECT X-MSG-EXT OBJECTID IDLE ENABLE UIDONLY X-ALL-MAIL X-UIDONLY LIST-EXTENDED LIST-STATUS SPECIAL-USE PARTIAL APPENDLIMIT=41697280
Forward Email:
* CAPABILITY XAPPLEPUSHSERVICE IMAP4rev1 APPENDLIMIT=52428800 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN CHILDREN CONDSTORE ENABLE ID IDLE MOVE NAMESPACE QUOTA SASL-IR SPECIAL-USE UIDPLUS UNSELECT UTF8=ACCEPT XLIST
POP3 テスト結果
Gmail: 認証なしではCAPAレスポンスが返されませんでした。
Outlook.com: 認証なしではCAPAレスポンスが返されませんでした。
iCloud: サポートされていません。
Fastmail: 接続がタイムアウトしました。以下の注記を参照してください。
Yahoo:
+OK CAPA list follows... SASL PLAIN XOAUTH2
Forward Email: 認証なしではCAPAレスポンスが返されませんでした。
SMTP テスト結果
Gmail:
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
Outlook.com:
250-DSN
iCloud:
250-DSN
Fastmail:
250 AUTH PLAIN LOGIN XOAUTH2 OAUTHBEARER
Yahoo:
250 AUTH PLAIN LOGIN XOAUTH2 OAUTHBEARER
Forward Email:
250-DSN, 250-REQUIRETLS
テスト結果に関する注記
Note
テスト結果からの重要な観察事項と制限事項。
-
Fastmailのタイムアウト: Fastmailへの接続はテスト中にタイムアウトしました。これはテストサーバーのIPによるレート制限やファイアウォール制限が原因と考えられます。Fastmailはドキュメントに基づき、IMAP/POP3/SMTPのサポートが堅牢であることが知られています。
-
POP3のCAPAレスポンス: 複数のプロバイダー(Gmail、Outlook.com、Forward Email)は認証なしではCAPAレスポンスを返しませんでした。これはPOP3サーバーの一般的なセキュリティ対策です。
-
DSNサポート: Outlook.com、iCloud、Forward EmailのみがSMTP EHLOレスポンスで明示的にDSNサポートを広告しています。他のプロバイダーがDSNをサポートしていないわけではありませんが、広告はしていません。
-
REQUIRETLS: Forward Emailのみがユーザー向けのチェックボックスでTLSの強制を広告しています。他のプロバイダーは内部的にサポートしている可能性がありますが、EHLOで広告はしていません。
-
テスト環境: テストは2026年1月22日 02:37 UTCにAWS EC2インスタンス(IPv4: 54.167.216.197、IPv6: 2600:4040:46da:9a00:b19e:3ad4:426c:2f48)から実施されました。
サマリー
Forward Emailは主要なメール標準において包括的なRFCプロトコルサポートを提供しています:
- IMAP4rev1: 16のサポートRFCと意図的な差異のドキュメント
- POP3: 4つのサポートRFCとRFC準拠の恒久的削除
- SMTP: SMTPUTF8、DSN、PIPELININGを含む11の拡張サポート
- 認証: DKIM、SPF、DMARC、ARCを完全サポート
- トランスポートセキュリティ: MTA-STSとREQUIRETLSを完全サポート、DANEは部分サポート
- 暗号化: OpenPGP v6とS/MIMEをサポート
- カレンダー: CalDAV、CardDAV、VTODOを完全サポート
- APIアクセス: 39のエンドポイントを持つ完全なREST APIで直接データベースアクセス可能
- iOSプッシュ:
XAPPLEPUSHSERVICEによるメール、連絡先、カレンダーのネイティブプッシュ通知
主要な差別化ポイント
Tip
Forward Emailは他のプロバイダーにはないユニークな機能で際立っています。
Forward Emailのユニークな特徴:
- 量子耐性暗号化 - ChaCha20-Poly1305で暗号化されたSQLiteメールボックスを提供する唯一のプロバイダー
- ゼロナレッジアーキテクチャ - パスワードがメールボックスを暗号化し、当社は復号できません
- 無料のカスタムドメイン - カスタムドメインメールに月額料金なし
- REQUIRETLSサポート - 配信経路全体でTLSを強制するユーザー向けチェックボックス
- 包括的なAPI - 39のREST APIエンドポイントによる完全なプログラム制御
- iOSプッシュ通知 - 即時配信のためのネイティブXAPPLEPUSHSERVICEサポート
- オープンソース - GitHubで完全なソースコードを公開
- プライバシー重視 - データマイニングなし、広告なし、トラッキングなし
- サンドボックス化された暗号化: 個別に暗号化されたSQLiteメールボックスを持つ唯一のメールサービス
- RFC準拠: 使いやすさよりも標準準拠を優先(例:POP3 DELE)
- 完全なAPI: すべてのメールデータへの直接プログラムアクセス
- オープンソース: 完全に透明な実装
プロトコルサポート概要:
| カテゴリ | サポートレベル | 詳細 |
|---|---|---|
| コアプロトコル | ✅ 優秀 | IMAP4rev1、POP3、SMTPを完全サポート |
| 最新プロトコル | ⚠️ 部分的 | IMAP4rev2部分サポート、JMAPは未対応 |
| セキュリティ | ✅ 優秀 | DKIM、SPF、DMARC、ARC、MTA-STS、REQUIRETLS |
| 暗号化 | ✅ 優秀 | OpenPGP、S/MIME、SQLite暗号化 |
| CalDAV/CardDAV | ✅ 優秀 | カレンダーおよび連絡先の完全同期 |
| フィルタリング | ✅ 優秀 | Sieve(24拡張)およびManageSieve |
| API | ✅ 優秀 | 39のREST APIエンドポイント |
| プッシュ | ✅ 優秀 | ネイティブiOSプッシュ通知 |