機能紹介
テンプレートの作成から宛先データの入力、確認、一括送信とログまで。FLY Letterの全機能をご紹介します
工程1 — テンプレート作成
HTMLで本文を書き、差し込み変数を仕込む

Monaco Editor による HTML エディタ
VS Code と同じエディタエンジンを内蔵。構文ハイライト、オートコンプリート、コード折りたたみ、80/120桁のルーラー表示が使えます。ローカルバンドルなのでオフラインでも動作します。
差し込み変数
${name} のような変数を宛先データの列と対応づけ、ワンクリックで本文に挿入できます。件名にも使えます。変数ごとにプレースホルダー(既定値)を設定でき、値が未入力のときはその値が使われます。
${email} は定義しなくても使える
${email} は変数として登録しなくても、常に宛先のメールアドレスに置き換わります。プレビューと実際の送信メールで同じ結果になります(そのぶん email は変数名として使えません)。
変数名を後から変えても壊れない
変数名を変更すると、宛先データの列とテンプレート内の記述が自動で追随します。変数名は半角英数字とアンダースコアで、先頭は英字またはアンダースコア。同じ名前を重複して登録することはできません。
3つの表示モードとリアルタイムプレビュー
エディタのみ/分割表示/プレビューのみを切り替えられます。プレビューは書きながら即座に反映され、リンクはOS標準のブラウザで開きます。
差し込み値の自動エスケープ
差し込む値はHTMLとして解釈されないよう自動でエスケープされます。宛先データに記号やタグが混ざっていてもレイアウトは崩れません。
工程2 — 宛先データ入力
Excelの感覚で宛先と差し込む値を用意する

Excelライクな表で入力
1列目がメールアドレス、2列目以降が差し込み変数の値
Excel・スプレッドシートとの相互コピー&ペースト
行の追加・挿入・削除(右クリック/ボタン/最下行でEnter)
オートフィルで連続入力、Ctrl+Z / Ctrl+Y で元に戻す・やり直し
ミスに気づける仕組み
メールアドレスの重複を大文字・小文字を区別せず検出してハイライト
形式が正しくない可能性のあるアドレスを件数で警告(送信自体は止めません)
検索でセルをハイライトし、前後の一致箇所へ移動
右クリックメニューからCSVとして書き出し(BOM付きUTF-8)。「=」などで始まる値は文字列として書き出すため、Excelで開いても数式として実行されません
CSVデータのインポート機能は開発中です。現在はExcelやスプレッドシートからのコピー&ペーストでデータを取り込んでください。
工程3 — プレビュー・確認
送る前に、宛先ごとの仕上がりと送信対象を確かめる

宛先ごとの仕上がりを確認
送信先リストから宛先を選ぶと、差し込み後の件名と本文が表示されます。宛先が多いときは、全列を対象にした部分一致の絞り込み検索で目的の相手を探せます。
宛先の除外と復帰
送りたくない宛先は「この宛先を除外」で対象から外せます。除外中は打ち消し線と「(除外)」表示になり、ワンクリックで戻せます。メールアドレスをキーに管理しているため、他の列を編集しても除外指定は崩れず、プロジェクトファイルにも保存されます。
送信方法の選択
GmailとメールサーバーのどちらでもOK。両方を登録しておき、ここで使う方を選びます。未設定のときは設定ダイアログへ誘導されます。
送信設定 — Gmail と メールサーバー
両方を登録して、送信のたびに使う方を選べます

Gmail(OAuth2)
Google認証で連携します。PKCE対応の安全な認証フローで、アクセストークンは自動でリフレッシュされるため長時間の一括送信でも途中で切れません。リフレッシュトークンは暗号化して保存されます。
メールサーバー(SMTP)
任意のSMTPサーバーに対応します。暗号化方式はTLS/SSL/なしから選択でき、「接続を確認」ボタンで保存前に疎通テストができます(「暗号化なし」は平文で接続します)。つながらないときは、アプリが原因を診断します。
選択中の送信方法が使えない状態のとき、別の設定へ黙って切り替えることはしません。意図しない送信元から送られてしまうことを防ぐためです。
接続できないときは、アプリが原因を調べます
ポートや暗号化方式の当てずっぽうも、証明書の警告への手探りの対応も要りません


つながる設定を探して提案する
ポートや暗号化方式が違っているときは、接続できる組み合わせを順に試して提案します。「この設定に変更する」を押すだけで反映され、そのまま再確認まで進みます。安全のため、暗号化なし(平文)の組み合わせを提案することはありません。
何を試しているかが見える
確認中は「他の設定を試しています(2/4)」のように進み具合が表示され、「確認をやめる」でいつでも中止できます。サーバー名が証明書と一致しない場合は、正しいサーバー名を提示します。
社内サーバーの証明書は、確認してから承認
独自の証明書を使うサーバーでは、発行先・発行元・有効期限・対象・拇印とリスクを表示します。サーバー管理者から知らされている内容と一致することを確かめてから承認してください。承認したあとは、接続確認も一括送信も確認を求められません。
承認するのは、確かめた1枚だけ
検証はOSの証明書ストアに任せ、承認した証明書は拇印が一致する1枚だけを受け入れます。すべての証明書を無条件に信頼する設定は用意していません。承認は設定ダイアログの一覧からいつでも解除できます。
診断はあくまで原因の提示と提案です。ユーザー名・パスワードの誤りやファイアウォールによる遮断など、アプリ側から解決できない原因もあります。なお、証明書を診断するための接続では認証情報を送りません。
工程4 — 送信・ログ
確認してから送り、結果を残し、失敗した分だけやり直す

送信前に、送信元アドレス・送信件数・除外件数を確認ダイアログで明示(重複や形式の警告も表示)
「テスト送信」は指定した宛先へ1件だけ送信(既定は送信元=自分宛て)。差し込み内容はリストの1件目を使い、宛先リストへは送りません
宛先ごとの状態を表示(待機中/送信中/送信完了/エラー/停止)。1通ごとに100ms間隔
ネットワーク断やレート制限などの一時的な障害は最大3回・指数バックオフで自動リトライ(認証エラーや宛先不正は再試行しません)
失敗した宛先があるときだけ「失敗分を再送」が表示され、その宛先だけを送り直せる
送信中はいつでも「送信停止」で中断でき、工程の移動はロックされる
送信が終わると自動的に「送信ログ」タブへ切り替わる

送信ログ
最大1,000件の送信履歴を記録します。宛先・件名・成否・エラーメッセージ・日時・送信方法(Gmail / メールサーバー)を確認でき、すべて/成功/失敗でフィルタできます。クリアは確認ダイアログ付きです。
CSVエクスポート
表示中のフィルタを反映したままCSVに書き出せます。BOM付きUTF-8・日本語ヘッダーなので、Excelでそのまま開けます。「=」などで始まる値は文字列として書き出すため、開いた時点で数式として実行されることはありません。
プロジェクト管理
途中まで作った内容を保存し、続きから再開できます
プロジェクトの保存・読み込み
件名・本文・差し込み変数の定義・宛先データ・除外した宛先を、.flyletter 形式(JSON)のファイルにまとめて保存できます。上書き保存と名前を付けて保存に対応。送信設定は含まれず、別途暗号化して管理されます。
未保存の変更を見逃さない
未保存の変更があるとヘッダーに ● が表示されます。保存せずに読み込み・終了しようとすると確認ダイアログが出ます。送信中はプロジェクトを開けません(進捗表示と実際に送っている内容が食い違わないようにするためです)。
書き込み中に落ちてもファイルが壊れない
保存は一時ファイルを経由するアトミック書き込みで行います。書き込みの途中でアプリが終了しても、既存のプロジェクトファイルが壊れることはありません。
セキュリティ
宛先も文面も認証情報も、お使いのPCの中で守る
AES-128-GCM 暗号化
メールサーバーのパスワードとGmailトークンを暗号化して保存します。暗号化キーはOSのキーストア(Windowsでは資格情報マネージャー)で管理されるマシン固有のランダムキーです。
保存済みパスワードは画面へ渡さない
一度保存したパスワードは画面側へ返しません。変更するときだけ入力する方式なので、画面から漏れることがありません。
メールヘッダインジェクション対策
件名・宛先・送信者名からCR/LFを除去し、宛先の形式を検証します。空白・改行・カンマを含む不正な宛先は送信せずエラーとして記録します。
プレビューのサンドボックス化
プレビューは allow-scripts のみを許可したiframeで描画します。リンクを開くときは送信元とURLスキーム(http / https / mailto)を検証します。
証明書は確かめた1枚だけを信頼
メールサーバーの証明書はOSの証明書ストアで検証します。独自の証明書は内容とリスクを表示したうえで、承認された拇印と一致する1枚だけを受け入れます。証明書を診断するための接続では認証情報を送りません。
CSVの数式インジェクション対策
宛先データと送信ログをCSVに書き出すとき、「=」「+」「-」「@」で始まるセルは文字列として書き出します。外部から持ち込まれた値が、Excelで開いた時点で数式として実行されることを防ぎます。
その他
工程ナビが現在地と状態を示す
各工程は未着手/作業中/完了/警告で表示されます。工程1は件名と本文の入力、工程2は有効なメールアドレスが1件以上(重複があれば警告)、工程3は送信設定の構成、工程4は送信ログが1件以上で「完了」になります。
ダークモード
ステータスバーから手動で切り替えられ、選択は保存されます。一度も切り替えていない初回はOSの設定に従います。Monaco Editorと宛先データのグリッドもテーマに連動します。
大量データへの対応
宛先リスト・送信進捗・送信ログはいずれも仮想スクロールで描画するため、件数が増えても軽快に動作します。
エラーは読み終わるまで消えない
通知は画面の右上に表示されます。成功・情報のお知らせは5秒で自動的に閉じますが、エラーと警告は閉じるまで残ります。原因を読み取れないまま消えてしまうことがありません。
アクセシビリティ
ダイアログのフォーカストラップとESCキーでの終了、aria属性、進捗バーのrole/aria-valuenow、prefers-reduced-motion への対応など、キーボードと支援技術での操作に配慮しています。入力を伴うダイアログは、誤クリックで内容を失わないよう背景クリックでは閉じません。
キーボードショートカット
よく使う操作はショートカットで素早く(macOSではCtrlをCmdに読み替えてください)
プロジェクトを保存(2回目以降は上書き)
名前を付けて保存
プロジェクトを開く(.flyletter)
元に戻す/やり直す(工程2のグリッド編集)
ダイアログを閉じる