要件
数百件の顧客先Excelリストから「メールアドレス」列の値を抜き取り、そのメールアドレス宛にGmailですべての顧客に案内メールを自動送信させたい、というリクエストがあった。これだけなら難易度は高くない。
懸念点
しかし、仮に自動送信ループ中に何らかのエラーで中断してしまった場合(PCの電源喪失、フリーズ、ネットワーク遮断、等々)、どの顧客まで送信できていて、どの顧客からできていないのか、それが確認できないとビジネスインパクトが大きい。従って、後ほど送信確認できるようなログを残す、というタスクを追加した。この部分は若干トリッキーであったため、備忘録として残す。
フロー作成手順
1.顧客先Excelを読み取る
1.1 Excelを起動
アクションメニューから「Excelの起動」をフローペインにドラッグ&ドロップ。開いた「Excelの起動」画面で「次のドキュメントを開く」を選択し、ドキュメントパスに、作業フォルダに保存した顧客先Excelファイルを選ぶ。
1.2 ワークシートを選択
アクションメニューから「アクティブなExcelワークシートの設定」をフローペインにドラッグ&ドロップ。開いた「アクティブなExcelワークシートの設定」画面で、ワークシート名として、顧客連絡先が入力されているワークシートの名前を入力する。
1.3 ワークシートのデータの末端セルを取得
これは、ワークシート内のデータが存在する範囲を捉えるために行う。
アクションメニューから「Excelワークシートから最初の空の列や行を取得」をフローペインにドラッグ&ドロップし、そのまま保存。
これにより、最初の空の列が%FirstFreeColumn%
となり、最初の空の行が%FirstFreeRow%
となる。
1.4 Excelのデータを読み取る
アクションメニューから「Excelワークシートから読み取り」をフローペインにドラッグ&ドロップし、取得「セル範囲の値」、先頭列「A」、先頭行「1」、最終列は「最初の空の列」である%FirstFreeColumn%から1列マイナスにした値「%FirstFreeColumn - 1%」、最終行も同様に%FirstFreeRow%から1行マイナスにした値「%FirstFreeRow - 1%」を入力。
この時、顧客先Excelは「メールアドレス、社名、担当者名」と最初の行に列名(ヘッダー)があるので、「範囲の最初の行に列名が含まれています」をオンにしておく(デフォルトでオン)。
1.5 Excelを閉じる
取得したデータは変数%ExcelData%
に格納されたのでExcelファイルは閉じてしまう。
アクションメニューから「Excelを閉じる」をフローペインにドラッグ&ドロップ。「ドキュメントを保存しない」のまま保存。
2.ログを残すためのログファイル名を準備
2.1
現在日時をログファイル名とする。例えば「2022年05月29日14時16分.txt」という具合に。
アクションメニューから「現在の日時を取得します」をフローペインにドラッグ&ドロップ。そのまま保存。これで現在日時が変数%CurrentDateTime%
に格納されることになる。
2.2 現在日時をテキストに変換
アクションメニューから「datetimeをテキストに変換」をフローペインにドラッグ&ドロップ。
変換するdatetimeが%CurrentDateTime%
になっていることを確認し、カスタム形式を「yyyy年MM月dd日HH時mm分」と入力し、保存。
ここまでの完成フロー。
3.For eachループを作成
アクションメニューから「For each」をフローペインにドラッグ&ドロップ。「反復処理を行う値」として顧客先Excelから読み込んだデータが格納されている変数%ExcelData%
を入力。保存。
このFor eachループの中に、Gmailでの自動送信処理と、ログを残す処理を入れ込む。
4.Gmailでのメール自動送信を設定
4.1 Gmailのアプリパスワードを取得する。
4.1.1 まず二段階認証を有効にする。
-
パスワードを要求されるので、入力して「次へ」ボタンをクリック。
-
「ログインの 2 つ目の手順としてスマートフォンを使用」という画面になったら、そのまま「続行」ボタンをクリック。
-
「最後にバックアップ方法を登録」画面になったら、自分のスマフォ電話番号が表示されていることを確認して(表示されていなかったら入力して)、「送信」ボタンをクリック。
これで二段階認証が有効化された。
4.1.2 アプリパスワードを取得する。
4.2 メール送信アクション設定。
-
アクションメニューから「メールの送信」を選び、For eachループの中にドラッグ&ドロップする。
-
「全般」で以下のように送信メール内容を設定する。変数
%CurrentItem%
には、Excelデータが格納されている変数%ExcelData%
から抜いてきた1行目のデータがある。1行目のデータは「メールアドレス」「社名」「担当者名」のデータが配列として構成されている。したがって、そこからメールアドレスを抜きたかったら%CurrentItem['メールアドレス']%
となる。担当者名を抜きたかったら%CurrentItem['担当者名']%
となる。 -
「保存」ボタンをクリックして「メールの送信」アクションを保存する。
5.ログ記録の設定
5.1 ログファイルにログを追記する。
-
ここがトリッキーなのだが、まだログファイルが生成されていないながらも、アクション「テキストに行を追加」を「メール送信アクション」の下にドラッグ&ドロップ。以下のように設定。
-
追加するテキストは、“[社名]の[担当者名]様([メールアドレス])に送信完了”というテキストログを残したいので、
%CurrentItem['社名']%の%CurrentItem['担当者名']% 様(%CurrentItem['メールアドレス']%)に送信完了
となる。 -
ここで「生成された変数」を見てほしい。「新しいテキスト」として
%Result%
変数が生成されている。つまり、%Result%
が新規作成されるログのテキストデータとなる。
保存ボタンをクリック。
5.2 テキストをファイルに書き込む。
アクション「テキストをファイルに書き込みます」をドラッグ&ドロップで「テキストに行を追加」の下に挿入。開いた画面に下記のように設定。
最初に準備したログ用フォルダC:\メール送信自動化\ログ
に%FormattedDateTime%.txtのファイル名でログファイルを作成するため、ファイルパスはC:\メール送信自動化\ログ\%FormattedDateTime%.txt
と入力する。
%FormattedDateTime%
は実行したときのDateTime(現在日時)。したがって、たとえば「2022年08月08日17時58分.txt」というファイル名になる。ここもトリッキーなのだが、同名テキストファイルが無い場合は勝手に新規作成される。
「書き込むテキスト」は%Result%とする。
「新しい行を追加する」はオン。
「ファイルが存在する場合」は、存在するはずはないのでデフォルトのままで良い。
以上で完成である。
課題
今回のログを残す処理は、PCの電源喪失、フリーズ、ネットワーク遮断、等々物理層・ネットワーク層の問題に対する対処であった。
しかし、よりありふれた、例えば送信先顧客メールアドレスが存在しない、あるいは顧客先Excelデータのメールアドレスに全角が混じっている、などで配信不能であった場合のエラー処理はできないだろうか?
実は「メール送信」アクションにはすでに「エラー発生時」のルールを設定できる項目がある。
「新しいルール」をクリックすると、「サブフローの実行」を選ぶことができる。
そこで「無効なメールアドレス」であったり「メールメッセージを送信できませんでした」の場合、メッセージを表示するサブフローを作成してみる。
6.サブフローで配信不能エラー対応
6.1 サブフローを作成。
6.2 「メールの送信」アクションにエラー処理を追加。
-
「メールメッセージを送信できませんでした」についても同様にNotDeliveryErrorサブフローを設定する。
-
ここで「スローエラー」を選ぶとフローはエラー発生と同時に停止する。「フロー実行を続ける」を選ぶとエラーを吐きながらも次のアクションへ移動する。どちらにせよ、エラーメッセージは出現するはず。
6.3 スモークテスト。
-
実際に、顧客先Excelデータのメールアドレスに2バイト文字を入れてみる。
これで2回目のループで配信不能となりエラーメッセージが出るはずである。
-
これでフロー実行させたところ、エラーメッセージは出てくれず、ループは完了してしまった。
-
原因・解決方法・回避方法は調べたが分からない。何か情報あればご教示ください。よろしくお願いいたしますm(__)m
本の宣伝
Gatsbyバージョン4>>>>改訂新版
前編の『Gatsby4+Tailwind+Gatsby Cloudでつくる~』と後編の『JAMStackを学ぼうGatsby4+microCMSでつくる~』を合わせ、次のようなデモサイトを構築します。
→ https://yah-space.work
静的サイトジェネレーターGatsbyの基本とnode APIの扱いについて踏み込んだ解説書。またバージョン4の新機能《DSG(静的サイトジェネレーション》と《Gatsby Functions》での問い合わせフォーム実装、Tailwind CSSでのレイアウト、Gatsbyと相性が良いGatsby Cloudを紹介し解説しております。
JAMStackを学ぼう Gatsby4+Tailwind CSS+Gatsby Cloudでつくるコーポレートサイト ~もうレンタルサーバーはいらない~ 改訂新版 前編(書籍2,980円)
GatsbyとmicroCMSを組み合わせてのコーポレートサイト作成手順を解説・ハンズオンした続編。待望の《サイト内検索機能》を《Gatsby Functions》と《microCMSのqパラメータ》で実装。
JAMStackを学ぼう Gatsby4+microCMSでつくるコーポレートサイト ~WordPressはもう古い~ 改訂新版 後編(書籍 2,580円)