目次
🎯 目的と背景
毎日多数の出荷があるBtoB ECでは、出荷完了メールと請求書の送付作業が手間で非効率です。
このPADフローは、以下の一連の業務を自動化し、メールの誤送信や作業漏れ防止・業務効率化を実現します。
🔄 自動化対象フローの概要
- 受注CSVを読み込み
- 出荷済み注文だけを抽出
- 基幹システムにログイン(複数ID対応)
- 請求書PDFをダウンロード
- Outlookメールで送信(テンプレ+PDF添付)
- ログ保存(CSV)
📁 必要ファイル構成
InvoiceMailerBot/
├─ main_flow.padx
├─ modules/
│ ├─ LoginSystem.padx
│ ├─ DownloadInvoicePDF.padx
│ ├─ SendEmail.padx
│ └─ WriteLog.padx
├─ data/
│ ├─ orders.csv ← 受注データ
│ ├─ accounts.csv ← ログイン情報
│ ├─ config.json ← 各種設定値
│ └─ log.csv ← 実行ログ
├─ templates/
│ └─ email_template.txt ← メール本文テンプレ
🧾 各ファイルの内容
orders.csv(受注一覧)
注文番号,顧客名,出荷ステータス,メールアドレス
1001,ABC株式会社,出荷済み,abc@example.com
1002,XYZ商事,未出荷,xyz@example.com
1003,LMN産業,出荷済み,lmn@example.com
accounts.csv(ログインアカウント)
表示名,ユーザーID,パスワード
A社担当,admin_a,pass_a
B社担当,admin_b,pass_b
config.json
{
"downloadFolder": "C:\\Users\\User\\Downloads\\invoices\\",
"timeoutSeconds": 30,
"maxRetry": 3
}
email_template.txt
{{顧客名}} 御中
いつも大変お世話になっております。
以下のご注文について、出荷が完了いたしましたので、請求書をお送りいたします。
注文番号:{{注文番号}}
何卒よろしくお願いいたします。
🧠 全体の処理構成
[1] orders.csvを読み込み
↓
[2] 出荷済みのみ抽出
↓
[3] 各注文ごとに以下を処理
├─ ログイン(複数アカウント切替)
├─ 請求書PDFをDL
├─ Outlookで送信(テンプレ文)
└─ ログ書き込み
🔧 PADフロー構築手順(画面操作つきで解説)
🔹 STEP1:受注CSVの読み込み
アクション:
- 「CSVファイルを読み取る」→
orders.csv - 変数名:
OrdersList
フィルター処理:
アクション:リストをフィルタリング
条件:項目["出荷ステータス"] = "出荷済み"
出力:ShippedOrdersList
🔁 STEP2:出荷済み注文をループ処理
アクション:ループ
対象:%ShippedOrdersList%
変数:CurrentOrder
🔹 STEP3:ログイン(LoginSystem.padx)
引数:
- ユーザーID:%Account[“ユーザーID”]%
- パスワード:%Account[“パスワード”]%
内容:
- Chrome起動
- ログイン画面に遷移
- ユーザーID/パスワードを入力 → ログイン
複数アカウントを交互に使いたい場合は、注文番号から担当者を識別するロジックを別途追加
📥 STEP4:請求書PDFをDL(DownloadInvoicePDF.padx)
処理内容:
- 基幹システムで「注文番号」を検索
- 請求書画面へ遷移
- 「PDF出力」ボタンをクリック
- ファイル出力を待機
アクション(ファイル待機):
アクション:ファイルの存在を待機
ファイルパス:%config["downloadFolder"]%%CurrentOrder["注文番号"]%.pdf
タイムアウト:%config["timeoutSeconds"]%
フォールバック処理:
- ファイルが見つからない場合は
Wait→Retry maxRetry回失敗したらログに「失敗」と記録
📧 STEP5:Outlookで送信(SendEmail.padx)
使用ファイル:email_template.txt
手順:
- テキストファイルを読み込み(メールテンプレ)
{{顧客名}}と{{注文番号}}を置換- Outlookの「新しいメールメッセージを送信」アクションで送信
添付:
添付ファイルパス:%config["downloadFolder"]%%CurrentOrder["注文番号"]%.pdf
アドレス:
宛先:%CurrentOrder["メールアドレス"]%
🧾 STEP6:ログ出力(WriteLog.padx)
ファイル:log.csv
追記内容:
日時,注文番号,メール宛先,結果
2025-09-11 10:00,1001,abc@example.com,送信完了
アクション:
- 「現在の日時を取得」
- 「CSVファイルに追記」
⚠️ エラーハンドリングの設計
| エラー内容 | 処理方法 |
|---|---|
| PDFがDLされない | フォールバック+リトライ(最大3回) |
| メール送信失敗 | エラー詳細をログへ書き込み |
| ログイン失敗 | 「画面遷移できなかった」旨をログへ記録 |
| Outlookが開いていない | 自動起動 or メッセージで促す |
💡 応用TIPS
🔁 アカウントのローテーション
accounts.csvを順番に使い回すようにすれば、日別でログインIDを分散可能。- 例:1件ずつ
accounts.csvから順に取得してログイン。
🔍 PDF命名の工夫
- ダウンロードファイルに「注文番号_日付.pdf」などを付けると管理が容易。
🔐 セキュリティ対応
- パスワードを Windows 資格情報マネージャーで管理して、直接入力を避けると安心。
📋 よくある質問(FAQ)
❓ Q1. PDFがDLされないのはなぜ?
A. システム側でPDF生成に時間がかかっている可能性があります。timeoutSeconds を長めに設定してみてください。
❓ Q2. メール本文を変更したい場合は?
A. templates/email_template.txt を編集するだけで変更できます。
❓ Q3. メールアドレスの取得元を変えたい
A. orders.csvの構成を変えて、宛先列に別のアドレスを指定すればOKです。
❓ Q4. 実行のタイミングを自動化できますか?
A. Windowsのタスクスケジューラで、PADフローを任意の時間に起動できます(例:毎朝9:00)。
❓ Q5. なぜOutlook限定?
A. OutlookはPADが公式サポートしており、「メール送信アクション」で直接操作できるため安定性が高いからです。
