📋 システム概要

このシステムは、Microsoft 365(Office 365)のメールアカウントを使用して、複数の宛先に一括でメールを送信するWebアプリケーションです。

主な機能

📤 一括送信

CSVファイルから宛先を読み込み、パーソナライズされたメールを一括送信

🤖 AI生成

Dify APIを使用してメール本文をAIで自動生成

📝 テンプレート

よく使う件名・本文をテンプレートとして保存・共有

🚫 停止リスト

配信停止者を管理し、誤送信を防止

📊 開封トラッキング

メールの開封状況をリアルタイムで追跡

🔍 返信監視

バウンスメールや配信停止希望を自動検出

📋 アンケート

メールと連携したアンケート作成・回答収集・分析

👥 顧客管理

顧客リストの一元管理、タグ付け、配信履歴追跡

ℹ️ 必要な環境
  • Microsoft 365アカウント(メール送信権限)
  • モダンブラウザ(Chrome、Edge、Safari推奨)
  • インターネット接続

🚀 はじめ方

1

ログイン

「Microsoft でログイン」ボタンをクリックし、Microsoft 365アカウントでログインします。

初回ログイン時は、メール送信権限の許可を求められます。「承諾」をクリックしてください。
2

CSVファイルの準備

送信先のメールアドレスを含むCSVファイルを準備します。

  • 1行目: ヘッダー(列名)
  • 2行目以降: データ
  • 必須列: メールアドレス列(列名は自由)
💡 テンプレートをダウンロード Step1に「テンプレートDL」ボタンがあります。サンプルデータ入りのCSVをダウンロードできます。
3

メールを作成して送信

3つのステップでメールを送信します:

  1. Step1: CSVをアップロード、メールアドレス列を選択
  2. Step2: 件名・本文を入力、プレースホルダーで差し込み
  3. Step3: 送信先を確認し、送信実行

📂 Step1: 送信リスト

CSVファイルのアップロード

1

ファイルを選択

「ファイルを選択」ボタンをクリックし、送信先リストのCSVファイルを選択します。

  • 対応文字コード: UTF-8、Shift-JIS(自動判定)
  • ファイルサイズ: 制限なし(ただし送信数に注意)
2

メールアドレス列を選択

CSVの列から、メールアドレスが含まれる列を選択します。

列名が「email」「メールアドレス」「mail」などの場合は自動選択されます。

停止リストの管理

配信を停止したいメールアドレスを管理できます。

  • CSV/テキストで追加: ファイルから一括追加
  • 手動で追加: 個別にメールアドレスを入力
  • Firebase同期: チーム間で停止リストを共有
  • 検索・削除: 停止リストの内容を確認・編集
⚠️ 重要 停止リストに該当するメールアドレスは自動的にスキップされます(解除不可)。

デジタルギフトの追加(オプション)

各受信者に個別のデジタルギフトURL等を差し込むことができます。

  1. デジタルギフトCSVを用意(各行にギフト情報)
  2. 「デジタルギフト追加」からCSVをアップロード
  3. 本文に {デジタルギフト} を記載
  4. 送信時に各受信者に異なるギフトが割り当てられる

✍️ Step2: メール作成

基本情報の入力

項目 説明
送信元メールアドレス ログインユーザーのメールアドレスが自動設定されます。共有メールボックスも選択可能(権限必要)。
件名 メールの件名。プレースホルダー使用可能。
本文 メールの本文。HTMLモード/テキストモードを切り替え可能。

プレースホルダーで差し込み

CSVの列名を {列名} の形式で記載すると、各受信者のデータで自動置換されます。

CSVデータ:

email 名前 会社名
tanaka@example.com 田中太郎 株式会社Example

本文テンプレート:

{会社名} {名前}様
いつもお世話になっております。

送信結果:

株式会社Example 田中太郎様
いつもお世話になっております。

HTMLメールの作成

「HTMLエディタ」ボタンをクリックすると、リッチテキストエディタが表示されます。

  • 太字、斜体、下線
  • 文字色、背景色
  • リンク挿入
  • 箇条書き、番号付きリスト

配信停止案内の追加

「配信停止案内を自動追加」をチェックすると、メール末尾に配信停止の案内が追加されます。

デフォルト文面は「配信停止を希望される場合は、このメールに返信してその旨をお知らせください。」です。

🚀 Step3: 送信実行

送信前の確認

送信リストが表示されます。以下を確認してください:

  • ✅ メールアドレスが正しいか
  • ✅ 停止リスト該当者(赤背景)がいないか
  • ✅ 送信件数が正しいか
⚠️ テスト送信推奨 まず1件だけ選択して自分宛にテスト送信し、内容を確認してから本番送信することを強く推奨します。

送信実行

1

送信対象を選択

  • 「全選択」: 停止リスト以外の全員
  • 個別選択: チェックボックスで選択
2

確認ダイアログ

「選択した宛先に送信」ボタンをクリックすると、最終確認ダイアログが表示されます。

  • 送信件数
  • 停止リストスキップ件数
  • 件名・本文のサマリー

確認チェックボックスをONにして「送信開始」をクリック。

3

送信中

進捗状況がリアルタイムで表示されます:

  • 成功件数
  • エラー件数
  • 経過時間・残り時間
  • 送信速度(件/秒)
送信中はブラウザを閉じないでください。送信が中断されます。

送信完了

完了後、送信結果レポートが表示されます。

  • 成功: ○○件
  • エラー: ○○件
  • スキップ: ○○件(停止リスト該当)
✅ 送信履歴の保存 送信履歴はFirestoreに自動保存され、チーム間で共有されます。

📝 テンプレート機能

よく使う件名・本文をテンプレートとして保存し、再利用できます。

テンプレートの保存

1

Step2でメール内容(件名・本文)を入力

2

「💾 保存」ボタンをクリック

3

テンプレート名を入力して保存

テンプレートの読み込み

  1. テンプレート選択ドロップダウンから読み込みたいテンプレートを選択
  2. 自動的に件名・本文が入力される
  3. 必要に応じて編集

テンプレートの削除

  1. 削除したいテンプレートを選択
  2. 「🗑️ 削除」ボタンをクリック
  3. 確認ダイアログで「OK」
ℹ️ チーム共有 テンプレートはFirestoreに保存され、チーム全体で共有されます。作成者名も表示されます。

更新ボタン

「🔄 更新」ボタンをクリックすると、他のメンバーが保存したテンプレートを再読み込みできます。

🚫 停止リスト管理

配信を停止したいメールアドレスを管理する機能です。停止リストに登録されたアドレスには送信されません。

停止リストへの追加方法

1. CSV/テキストファイルから追加

  1. Step1の「停止リスト読込」セクション
  2. 「ファイルを選択」でCSVまたはテキストファイルを選択
  3. 自動的にメールアドレスが抽出され、停止リストに追加

2. 手動で追加

  1. 「手動追加」ボタンをクリック
  2. メールアドレスを入力
  3. 理由を入力(オプション)
  4. 「追加」をクリック

3. 返信監視から自動追加

バウンスメールや配信停止希望を検出した場合、承認後に自動的に停止リストに追加されます。

停止リストの確認・管理

Step1の「停止リスト一覧」で以下が可能です:

  • 検索: メールアドレスで検索
  • 選択削除: チェックボックスで選択して削除
  • CSVエクスポート: 停止リストをCSVファイルでダウンロード
  • Firebase同期: チーム間で共有

送信時の動作

⚠️ 強制スキップ 停止リストに該当するメールアドレスは、送信実行時に自動的にスキップされます。この動作は解除できません(誤送信防止のため)。

Step3の送信リストでは、停止リスト該当者は赤背景で表示されます。

🔍 返信監視 NEW

バウンスメール(配信失敗)や配信停止希望を自動的に検出する機能です。

監視対象

  • バウンス: 配信不能、送信エラー、アドレス不明など
  • 配信停止: 購読解除、配信停止希望など

使い方

1

返信監視を開く

ヘッダーの「返信監視」ボタンをクリック

2

監視する送信元アドレスを選択

自分のメールアドレスまたは共有メールボックスを選択

3

スキャン実行

「スキャン開始」ボタンをクリック。送信済みフォルダと受信トレイをスキャンします。

4

検出結果を確認

検出されたメールが一覧表示されます:

  • メールアドレス
  • 種別(バウンス/配信停止)
  • 検出理由
  • メッセージ内容
5

承認または却下

  • 承認: 停止リストに追加
  • 却下: 停止リストに追加しない

スキャン期間

前回のスキャン日時から現在までのメールをスキャンします。初回は過去7日間をスキャンします。

「スキャン期間をリセット」ボタンで、再度過去7日間からスキャンできます。

💡 ヒント 定期的にスキャンを実行することで、配信エラーを早期に発見できます。

🤖 AI生成機能

Dify APIを使用して、メール本文をAIで自動生成できます。

使い方

1

API Keyの設定(初回のみ)

Step2の「AI生成」ボタンをクリックすると、API Key設定画面が表示されます。管理者から取得したAPI Keyを入力してください。

2

生成条件を入力

項目 説明
用件 メールの主な内容(例: 新製品のご案内)
目的 メールの目的(例: プロモーション、お知らせ)
トーン 非常に丁寧 / ビジネス標準 / カジュアル
言語 日本語 / 英語 / 中国語
出力形式 HTML / プレーンテキスト
追加要望 その他の要望(例: {名前}プレースホルダーを含める)
3

生成実行

「生成」ボタンをクリック。AIが文章を生成し、リアルタイムで表示されます。

4

確認・編集

生成された文章を確認し、必要に応じて編集してください。「採用」ボタンで本文に挿入されます。

⚠️ 重要 AIが生成した文章は必ず人間が確認してから送信してください。不適切な表現や誤情報が含まれる可能性があります。

📊 開封トラッキング

メールの開封状況をリアルタイムで追跡する機能です。

仕組み

メール本文に透明な1x1ピクセル画像(トラッキングピクセル)を埋め込みます。受信者がメールを開くと、画像が読み込まれ、開封として記録されます。

設定方法

  1. Step2で「開封追跡を有効にする」をチェック
  2. 通常通りメールを送信
  3. 開封情報は自動的にFirestoreに記録される

開封状況の確認

(将来のアップデートで実装予定)

ℹ️ 制限事項
  • 画像を表示しないメールクライアントでは検出できません
  • プレビュー表示でも開封とカウントされる場合があります
  • プライバシー保護機能により、正確性が低下する場合があります

📋 アンケート機能 NEW

メール送信と連携したアンケート機能で、受信者からフィードバックを収集できます。

アンケートの作成

1

アンケートタブを開く

ヘッダーの「アンケート」タブをクリックします。

2

新規作成

「新規作成」ボタンをクリックし、アンケートのタイトルと説明を入力します。

3

質問を追加

質問タイプを選択して質問を追加します。上下移動ボタンで順序を変更できます。

質問タイプ

タイプ 説明
単一選択 ラジオボタンで1つだけ選択
複数選択 チェックボックスで複数選択可能
テキスト 短い自由記述(検証ルール設定可能)
長い回答 長文の自由記述(テキストエリア)
評価 1〜5のスター評価
日付 カレンダーから日付を選択

テキスト検証ルール

テキスト質問には入力検証を設定できます:

  • メールアドレス形式: 有効なメール形式かチェック
  • 数値のみ: 数字のみ入力可能
  • 電話番号形式: 電話番号形式かチェック
  • URL形式: 有効なURL形式かチェック

メールへの埋め込み

メール本文に {surveyUrl} プレースホルダーを追加すると、各受信者固有のアンケートURLが自動挿入されます。

以下のリンクからアンケートにご回答ください。
{surveyUrl}

結果の確認

  • アンケートタブで対象のアンケートを選択
  • 「ダッシュボード」で回答状況を確認(回答率、回答数のグラフ、質問ごとの分布)
  • 送信履歴から各受信者の回答状況を追跡

回答状況の追跡

状態 説明
回答済 アンケートに回答完了
未回答 まだ回答していない
💡 ヒント 未回答の受信者に対しては、履歴から再送信機能を使ってリマインダーを送信できます。

👥 顧客管理 NEW

顧客リストを一元管理し、メール配信履歴・開封状況・アンケート回答を追跡できます。

顧客管理画面へのアクセス

メール配信画面のヘッダーにある「顧客管理」リンクをクリック、または直接 customer.html にアクセスします。

顧客データの標準項目

項目 説明
メールアドレス 必須。顧客の識別キー
氏名 顧客名(姓・名を別々にインポート可能)
会社名 所属会社
部署 所属部署
役職 役職
電話番号 連絡先電話番号
住所 住所
メモ 自由記述メモ

顧客のインポート

1

CSVファイルの読み込み

「インポート」ボタンをクリックし、CSVファイルをドラッグ&ドロップまたは選択します。

2

列のマッピング

CSVの列を標準項目に対応付けます。「姓」「名」が別列の場合は、それぞれマッピングすると自動的に「氏名」に結合されます。

3

タグ列マッピング(任意)

CSVの列値が「1」の場合にタグを自動付与できます。例:「is_vip」列が「1」の行に「VIP」タグを付与。

4

プレビューとインポート実行

新規/既存/重複の件数を確認し、インポートモードを選択して実行します。

  • 新規のみ追加: 既存メールアドレスはスキップ
  • 既存も更新: 既存データを上書き(確認ダイアログあり)

タグ管理

顧客をグループ分けするタグ機能:

  • 「タグ管理」タブで新規タグを作成(名前と色を設定)
  • 顧客編集時にタグを割り当て
  • 顧客一覧でタグによる絞り込み

顧客一覧の機能

機能 説明
検索 メールアドレス、氏名、会社名で検索
タグフィルター 特定のタグを持つ顧客のみ表示
ソート 各列のヘッダーをクリックでソート
表示件数 20/50/100/200件から選択

統計表示

顧客一覧に以下の統計を表示:

  • 送信: メール送信回数(クリックで履歴表示)
  • 開封: メール開封回数 / 送信回数
  • 回答: アンケート回答数

一括操作

複数の顧客を選択して一括操作:

  • 📧 メール送信: 選択した顧客をメール送信画面へ
  • 🗑️ 削除: 選択した顧客を一括削除(確認ダイアログあり)
💡 顧客からのメール送信 顧客一覧でチェックボックスで顧客を選択し、「📧 メール送信」ボタンをクリックすると、メール配信画面に遷移し、選択した顧客が送信リストに自動設定されます。

🔧 トラブルシューティング

ログインできない

症状 原因 解決策
ポップアップが表示されない ポップアップブロック ブラウザでポップアップを許可
AADSTS50011エラー リダイレクトURIの不一致 管理者にAzure ADの設定を確認依頼
AADSTS65001エラー 管理者の同意が必要 管理者にAPI権限の承認を依頼

メール送信に失敗する

症状 原因 解決策
401エラー トークン期限切れ 再ログイン
429エラー レート制限 しばらく待ってから再送信
特定のアドレスにエラー メールアドレスが無効 アドレスを確認・修正

テンプレートが表示されない

  1. ブラウザコンソール(F12)でエラーを確認
  2. 「🔄 更新」ボタンをクリックして再読み込み
  3. Firebaseの接続状態を確認
  4. ページを再読み込み(Ctrl+R)

CSV読み込みエラー

  • 文字コードがUTF-8またはShift-JISか確認
  • CSVの形式が正しいか確認(カンマ区切り)
  • 特殊文字が含まれていないか確認
  • ファイルが破損していないか確認

AI生成が動作しない

  1. API Keyが正しく設定されているか確認
  2. ローカル開発の場合、local_proxy.js が起動しているか確認
  3. ブラウザコンソールでCORSエラーがないか確認
  4. Dify APIのステータスを確認

❓ よくある質問(FAQ)

Q1. 一度に何件まで送信できますか?

A: 技術的な制限はありませんが、Microsoft 365には以下の制限があります:

  • 1日あたり10,000通まで
  • 1分間に30通以上送信すると制限される場合があります

このシステムでは、送信間隔を500msに設定しており、1時間あたり約7,200通送信できます。

Q2. 送信中にブラウザを閉じてしまいました

A: 送信が中断されます。再度ログインし、送信済みの件数を確認してから、未送信分を再送してください。

Q3. 停止リストはどこに保存されますか?

A: Firebaseに保存され、チーム全体で共有されます。ブラウザのローカルストレージにもバックアップされます。

Q4. HTMLメールとテキストメールの違いは?

A:

  • HTMLメール: 装飾(太字、色、リンク等)が可能。画像も埋め込み可能。
  • テキストメール: プレーンテキストのみ。全てのメールクライアントで表示可能。

重要な連絡はテキスト、プロモーションはHTMLがおすすめです。

Q5. デジタルギフトは1回の送信で何件まで使えますか?

A: デジタルギフトCSVに登録されている件数まで使用できます。送信リストより少ない場合、ギフトがない受信者には空白が挿入されます。

Q6. テンプレートは何件まで保存できますか?

A: Firestoreの制限内であれば無制限です(実用上、数百件は問題ありません)。

Q7. 送信履歴はどのくらい保存されますか?

A: Firestoreに永続的に保存されます。必要に応じて古い履歴は手動で削除できます。

Q8. 複数のメールアドレスから送信できますか?

A: はい。以下の条件を満たせば可能です:

  • 共有メールボックスへのアクセス権限がある
  • Azure ADで Mail.Send.Shared 権限が許可されている

Q9. プレースホルダーが置換されません

A: 以下を確認してください:

  • プレースホルダーの形式が {列名} になっているか
  • 列名がCSVのヘッダーと完全一致しているか(大文字小文字も区別)
  • 全角の中括弧ではなく、半角の {} を使用しているか

Q10. スマートフォンでも使えますか?

A: 基本的な機能は使えますが、PC/タブレットの使用を推奨します。特に大量送信時はPC推奨です。

Q11. アンケートの回答期限は設定できますか?

A: 現在、回答期限の設定機能はありません。必要に応じてメール本文で回答期限を案内してください。

Q12. 顧客データは何件まで登録できますか?

A: Firestoreの制限内であれば無制限です。実用上、数万件は問題なく管理できます。

Q13. CSVインポートで姓と名が別の列になっている場合は?

A: 列マッピング画面で「姓」と「名」をそれぞれ選択すると、自動的に「氏名」フィールドに結合されます。「山田」+「太郎」→「山田 太郎」

Q14. 顧客にタグを自動で付けたい場合は?

A: CSVインポート時の「タグ列マッピング」機能を使用します。例えば、CSVの「is_vip」列が「1」の行に「VIP」タグを自動付与できます。

📞 サポート

ご不明な点やトラブルがある場合は、以下にお問い合わせください。

📧 メール

support@techsor.co.jp

📖 セットアップガイド

setup-guide.html

💻 技術リファレンス

technical-skills.md

ℹ️ バージョン情報

現在のバージョン: v4.6.0
最終更新: 2026年1月26日