🔐 1. 初期設定(Azure Portal)
このアプリを使用するには、Azure Portal でアプリを登録し、以下の2つのIDを取得する必要があります。
- テナントID: 組織を識別するID
- クライアントID: アプリを識別するID
詳細は azure_setup_guide.md を参照してください。
📧 2. メール送信の流れ
- ログイン: テナントID・クライアントIDを入力し、Microsoftアカウントでログイン
- 送信元設定: ドロップダウンから選択(初期値: infotechsor@techsor.co.jp)
- 件名・本文入力: メールの内容を作成
- テスト送信: まず1通だけ自分宛に送信して確認
- 停止リスト読込: 配信停止アドレスのリストを読み込み(必須)
- CSV選択: 送信先リストのCSVファイルを選択
- 一斉送信: 問題なければ一斉送信を開始
💡 停止リストを読み込まずに送信しようとすると警告が表示されます。
📄 3. CSVファイルの形式
v4.4.0の新機能: メールアドレス列を自由に選択可能になりました。emailという列名は不要です。
📧 メールアドレス列の選択
- 自動検出: 'email', 'mail', 'メール', 'メールアドレス'などの列名を自動検出
- 手動選択: CSV読み込み後、任意の列をメールアドレス列として選択可能
- 視覚的確認: 選択された列はテーブルで📧マークと青色背景で強調表示
📝 CSVサンプル
email,name,company
yamada@example.com,山田太郎,株式会社A
suzuki@example.com,鈴木花子,株式会社B
※ mail_address、連絡先など、任意の列名が使用可能です。
🔤 文字コードの自動判定
- 自動判定: デフォルトでUTF-8/Shift_JISを自動判定(推奨)
- 手動選択: Excelの場合はShift_JIS、Googleスプレッドシートの場合はUTF-8を選択可能
- 読み込み後の変更: 文字化けした場合はエンコーディングを変更して再読み込み
💡 ヒント: 自動判定でほとんどのケースに対応できます。文字化けが発生した場合のみ手動選択してください。
🎨 3.5. UI/UXの改善
v4.0.0でUI/UXを全面刷新し、より使いやすくなりました。
主な改善点
- 🎯 3ステップウィザード: 送信リスト作成 → メール作成 → 送信実行の明確なフロー
- 🎨 ビジネス向けデザイン: 落ち着いた配色とモダンなレイアウト
- 📱 レスポンシブ対応: 画面サイズに応じて最適化
- 🔍 視認性向上: アイコンとカラーコーディングで直感的に操作
- ⚡ 操作性改善: ボタン配置の最適化と明確なラベリング
Step1: 送信リスト作成
- CSVファイルのドラッグ&ドロップ対応
- 文字コード選択ボタンを見やすく配置
- プレビュー表で列の確認が容易
- 必須項目チェックボックスの一目瞭然な表示
- 停止リスト一覧・同期機能の追加
Step2: メール作成
- AIメールアシスタントボタンの追加
- プレースホルダーパネルの見やすい配置
- HTMLエディタとテキストエディタの切り替えが明確
- 配信停止案内の設定セクション
- プレビューボタンを目立つ位置に配置
Step3: 送信実行
- 送信リストのテーブル表示と複数選択
- 検索・フィルター機能の追加
- 送信状況のリアルタイム更新
- 進捗バーと詳細ログの表示
🔄 4. 差し込み機能
本文中に {列名} と書くと、CSVの各行の値に置換されます。
{name} 様
いつもお世話になっております。
{company} の担当者様宛にご連絡いたします。
📎 5. 添付ファイル
- 複数ファイルを添付可能
- 1ファイル3MB以下の制限あり
- 全宛先に同じファイルが添付されます
🔍 6. スキップ機能(フィルタリング)
以下の条件に該当するデータは自動的にスキップされます。すべてログに記録されます。
🚫 停止リスト(必須・常時有効)
- ⚠️ この機能は常に有効で、解除できません(誤送信防止のため)
- 送信しないメールアドレスのリストを事前に読み込み
- 対応形式: CSV(email列)またはテキスト(1行1アドレス)
- 配信停止依頼のあったアドレスなどを管理
- 大文字・小文字は区別しません
- ⚠️ 未読み込みの場合、送信は中断されます
☁️ Firebase一括同期機能
- CSV読み込み後、「☁️ Firebaseに同期」ボタンが表示されます
- クリックすると、読み込んだ停止リストをFirestoreに一括アップロード
- 重複チェック: 既存のアドレスは自動スキップ
- バッチ処理: 100件ずつ効率的に処理
- プログレス表示: 同期状況をリアルタイム表示
- 完了サマリー: 追加件数・スキップ件数・エラー件数を表示
👁️ 一覧表示・検索機能
- 「👁️ 一覧表示」ボタンで停止リストの内容を確認可能
- Firestore統合: ローカルCSVとFirestoreのデータを自動マージ
- 検索機能: リアルタイムでメールアドレスを検索・フィルター
- 件数表示: 現在の登録件数を表示
- 最大100件表示: それ以上は「...他 N件」と表示
- 🔄 更新ボタン: Firestoreから最新データを再読み込み
⚠️ 重要: 配信停止依頼者への誤送信は法的リスクがあるため、この機能は必須となっています。
💡 Firebase同期のメリット: チーム全体で停止リストを共有でき、返信監視機能で自動検出されたアドレスと統合管理できます。
🌏 海外ドメイン
- スキップ対象: .cn, .kr, .tw, .hk, .us, .uk, .de, .fr, .ru など
- 送信対象: .jp, .com, .net, .org など(日本・汎用ドメイン)
- チェックボックスをオフにすると全アドレスに送信
👤 必須項目チェック
- 会社名や名前などの必須項目が空のデータをスキップ
- CSV読み込み後: 列名がチェックボックスで表示される
- 自動チェック: company, name, 会社名, 名前, 氏名, 担当者 を含む列
- チェックした列が空のデータは送信されません
⚠️ 7. 注意事項
- 送信制限: Exchange Online には1日あたりの送信制限(通常10,000通)があります
- スパム判定: 大量送信時はスパム判定やアカウントロックのリスクがあります
- ブラウザを閉じない: 送信中はブラウザのタブを閉じないでください
- 送信間隔: スロットリング回避のため、1秒に1通のペースで送信されます
📊 7. 送信結果リスト
送信後、各メールアドレスの状態を一覧で確認できます。
- ✅ 成功: 送信が正常に完了
- ❌ 失敗: API送信エラー(ネットワーク問題、権限不足など)
- ⏭️ スキップ: 停止リスト、海外ドメイン、必須項目空などの理由でスキップ
機能:
- フィルター: 「すべて」「成功」「失敗」「スキップ」で絞り込み表示
- CSVエクスポート: 送信結果をCSVファイルとしてダウンロード
- 再送信: 失敗・スキップした宛先を選択して再送信
🔄 再送信機能
- 失敗・スキップした行のチェックボックスを選択(「すべて選択」も可能)
- 「選択した宛先に再送信」ボタンをクリック
- 再送信が成功すると、状態が「成功」に更新されます
⚠️ スキップされた宛先への再送信について:
停止リストや海外ドメインでスキップされた宛先も再送信できますが、
スキップ理由を確認してから再送信してください。
💡 エクスポートしたCSVは、送信履歴の管理に活用できます。
📝 8. テンプレート機能
よく使う件名・本文をテンプレートとして保存し、再利用できます。
- 💾 保存: 現在の件名・本文をテンプレートとして保存
- 📂 読込: ドロップダウンからテンプレートを選択して読み込み
- 🗑️ 削除: 不要なテンプレートを削除
- ☁️ チーム共有: Firestoreでテンプレートをチーム全体で共有
💡 テンプレートはFirestoreに保存され、チームメンバー全員がアクセスできます。
🤖 8.5. AIメール作成アシスタント
Dify APIを使用して、AIがメールの件名・本文を自動生成します。
使い方
- アシスタントを開く: Step2の「🤖 AIでメール作成」ボタンをクリック
- API設定: Dify APIキーを入力(初回のみ、Firestoreに保存されます)
- 目的を選択: メールの目的を候補から選択、またはカスタム入力
- 追加要望: オプションで細かい要望を入力(例:300文字以内で)
- オプション設定: 言語(日本語/英語/中国語)、文体(丁寧/標準/カジュアル)、形式(テキスト/HTML)を選択
- 生成実行: 「✨ AIでメールを生成」ボタンをクリック
- ストリーミング表示: 生成されるテキストがリアルタイムで表示
- 適用: 生成結果を件名・本文に適用
メールの目的(プリセット)
- 展示会への来場お礼メール
- 新製品発表のご案内
- ウェビナー参加のお誘い
- 資料請求へのお礼とフォロー
- 見積もり提出のご案内
- 営業ヒアリングの日程調整
- キャンペーン・セールの告知
- サービス更新・機能追加の案内
生成オプション
| オプション | 選択肢 | 説明 |
| 言語 | 日本語/English/中文 | メールの言語を選択 |
| 文体・トーン | とても丁寧/標準/カジュアル | メールの丁寧さを調整 |
| 出力形式 | テキスト/HTML | プレーンテキストまたはHTML |
🤖 AIアシスタント: Dify APIを使用してメールを自動生成。生成されたテキストはそのまま使用することも、編集してから使用することもできます。
⚠️ 注意: ストリーミング生成中は画面を閉じないでください。生成が完了するまでお待ちください。
👁️ 9. プレビュー機能
送信前にCSVの1件目のデータで差し込み結果を確認できます。
- 件名・本文のプレースホルダーが実際の値に置換された状態を表示
- ギフトプレースホルダーも置換されて表示
- 送信元・送信先も確認可能
📊 10. HTMLメール機能
リッチテキストエディタ(Quill)でHTMLメールを作成できます。
- フォーマット: 太字、斜体、下線、取り消し線
- 色: 文字色、背景色
- リスト: 番号付き、箇条書き
- リンク・画像: URLを挿入可能
⚠️ HTMLメールは受信者のメールクライアントによって表示が異なる場合があります。
🔗 11. 開封追跡機能
HTMLメール送信時に透明な1x1ピクセル画像を挿入し、開封を追跡します。
- 有効化: 「トラッキングピクセルを挿入」にチェック
- 統計表示: 「📊 開封統計を見る」で送信数、開封数、開封率を確認
- 履歴: 開封したメールアドレスと日時を一覧表示
⚠️ 制限: テキストメール表示や画像ブロック時は追跡できません。
📝 注意: 完全な追跡にはFirebase Functionsの設定が必要です。
🚫 11.5. 配信停止案内の自動追加
特定電子メール法に準拠するため、メール末尾に配信停止案内を自動追加できます。
- デフォルト有効: 「メール末尾に配信停止案内を自動追加」がデフォルトでON(推奨)
- カスタマイズ可能: 配信停止案内のテキストを自由に編集可能
- プレースホルダー: {fromEmail} で送信元アドレスを自動挿入
- 自動整形: HTMLモードでは見やすいフォーマットで自動追加
表示例(テキストモード)
────────────────────────────────
配信停止をご希望の方は、お手数ですが下記までご連絡ください。
メール: tg_aimeet@aimeet.jp
件名: 配信停止希望
※ 本メールに返信いただいても配信停止できません。
────────────────────────────────
⚖️ 法令遵守: 特定電子メール法により、営業メールには配信停止の方法を明記する義務があります。
🔍 11.6. 返信監視・バウンス検出機能
送信後の返信を自動監視し、バウンス(配信失敗)メールや配信停止依頼を検出します。
主な機能
- 📧 送信元アドレスの受信トレイを監視: バウンスメールは送信元に届きます
- 🤖 自動検出: キーワードベースでバウンス・配信停止を自動判別
- ✅ 手動承認フロー: 検出結果を確認してから停止リストに追加
- 🚫 統合停止リスト管理: Firestoreで一元管理
- 📋 CSV出力: 停止リストをCSVファイルとしてエクスポート
使い方
- ログイン: Microsoftアカウントでログイン
- 返信監視画面を開く: ヘッダーの「🔍 返信監視」ボタンをクリック
- 送信元アドレスを選択: 監視する送信元メールアドレスを選択
- スキャン実行: 「🔄 最新の返信をスキャン」ボタンをクリック
- 結果確認: 検出されたバウンス・配信停止を確認
- 承認/却下: 各エントリを確認して承認または却下
- 停止リスト管理: 「📋 停止リスト管理」タブで確認・編集
検出キーワード
⚠️ バウンス検出:
- undelivered, bounced, failed
- does not exist, not found
- 配信できませんでした
- メールアドレスが見つかりません
- SMTP 550, 551, 552, 553...
🚫 配信停止検出:
- unsubscribe, opt-out
- stop sending, remove me
- 配信停止, メール停止
- 受信拒否, 配信解除
スキャン結果の表示
- バウンス検出: ⚠️ アイコンと赤色で表示
- 配信停止検出: 🚫 アイコンとオレンジ色で表示
- スキャンしたメール数: 総メッセージ数を表示
- 検出理由: 具体的なエラーメッセージやキーワードを表示
停止リスト管理
- 一覧表示: 全停止リストをテーブル形式で表示
- 検索機能: メールアドレスで検索・フィルター
- ソース別フィルター: バウンス/配信停止/手動追加で絞り込み
- 手動追加: ➕ 手動追加ボタンで個別にアドレスを追加
- CSV出力: 💾 CSV出力ボタンで全リストをダウンロード
- 削除機能: 不要なエントリを個別に削除可能
💡 ヒント: 定期的にスキャンを実行することで、無効なアドレスへの送信を防ぎ、送信品質を維持できます。
⚠️ 重要: バウンスメールは送信元アドレスの受信トレイに届くため、監視する送信元アドレスを正しく選択してください。
📊 11.7. ダッシュボード機能
送信結果を視覚的に確認できるダッシュボード画面です。
表示内容
- 📊 サマリーカード: 総送信数、成功数、失敗数、スキップ数を一目で確認
- 📈 開封率: メール開封率を円グラフで表示(開封追跡有効時)
- 📉 送信推移グラフ: 時間帯別の送信数を棒グラフで表示
- 🕐 最近の送信履歴: 直近10件の送信結果を一覧表示
使い方
- ヘッダーの「📊 ダッシュボード」ボタンをクリック
- モーダル画面でサマリーと統計を確認
- 「🔄 最新データに更新」で最新の送信結果を取得
- 各カードとグラフで送信状況を視覚的に把握
💡 ヒント: ダッシュボードでは、Firestoreに保存された送信履歴を集計して表示します。定期的に確認することで、送信品質の改善に役立ちます。
🎁 12. デジタルギフト機能
Amazonギフトカード等のデジタルギフトURLを各宛先に個別に差し込めます。
使い方
- ギフトCSVを読み込み: 「🎁 ギフトCSVを選択」でdigitalgift.csvを読み込み
- 割り当て確認: 送信リストにギフトコードが表示されます
- 本文にプレースホルダーを記述: 下記参照
- 送信: 各宛先に順番にギフトが割り当てられます
プレースホルダー(件名・本文で使用可能)
| プレースホルダー | 説明 | 例 |
{giftUrl} | ギフト受取URL | https://service-gift.jp/...?authCode=... |
{giftCode} | シリアルコード | 7aZjg2KchAHj2A2n |
{giftAmount} | 金額 | 1000 |
{giftExpiry} | 有効期限 | 2026/02/28 |
本文例
{name} 様
日頃のご愛顧に感謝し、Amazonギフトカードをお贈りします。
【ギフト金額】{giftAmount}円
【受取URL】{giftUrl}
【有効期限】{giftExpiry}
上記URLをクリックしてお受け取りください。
⚠️ 注意: ギフト数 ≧ 送信先数 が必要です。不足するとスキップされます。
📋 12.5. アンケート機能
メール受信者向けのアンケートを作成し、各宛先に固有のリンクを自動挿入できます。
アンケート作成
- アンケート管理を開く: ヘッダーの「📋 アンケート管理」ボタンをクリック
- 新規作成: 「➕ 新規作成」タブでアンケート名と質問を設定
- 質問タイプ: 自由記述、単一選択、複数選択、評価(星)から選択
- 保存: 「💾 保存」ボタンでFirestoreに保存
メールへの挿入方法
- CSVを読み込み: Step1で送信先CSVを読み込む
- アンケートを選択: Step2の「📋 アンケート挿入」パネルでアンケートを選択
- プレースホルダー挿入: 「📋 {surveyUrl} を挿入」ボタンをクリック
- 送信: 各宛先に固有のトークン付きURLが自動生成されます
本文例
{name} 様
先日はご来場いただきありがとうございました。
ぜひアンケートにご協力ください。
▼ アンケートはこちら
{surveyUrl}
ご回答いただいた方にはプレゼントをお送りします。
回答の確認
- 回答一覧: アンケート管理の「📊 回答一覧」タブで確認
- CSVエクスポート: 「📥 CSVエクスポート」で回答をダウンロード
- 回答者追跡: 各回答にメールアドレスと回答日時が記録されます
💡 ポイント: 各宛先に固有のトークンが発行されるため、誰が回答したかを追跡できます。同じトークンでの重複回答は防止されます。
❓ 13. トラブルシューティング
| エラー |
対処法 |
| リダイレクトURIが一致しません |
Azure Portal の「認証」で現在のURLを追加 |
| 管理者の承認が必要です |
IT管理者にアプリの承認を依頼 |
| 文字化けする |
CSVの文字コードを切り替え(Shift_JIS / UTF-8) |
| 送信に失敗する |
送信制限に達している可能性。時間をおいて再試行 |