LoginSignup
3
2

More than 1 year has passed since last update.

《Power Automate Desktop》顧客先ExcelファイルのメールアドレスにGmail自動送信しそのログを残す(エラー対応)

Last updated at Posted at 2022-08-09

要件

数百件の顧客先Excelリストから「メールアドレス」列の値を抜き取り、そのメールアドレス宛にGmailですべての顧客に案内メールを自動送信させたい、というリクエストがあった。これだけなら難易度は高くない。

懸念点

しかし、仮に自動送信ループ中に何らかのエラーで中断してしまった場合(PCの電源喪失、フリーズ、ネットワーク遮断、等々)、どの顧客まで送信できていて、どの顧客からできていないのか、それが確認できないとビジネスインパクトが大きい。従って、後ほど送信確認できるようなログを残す、というタスクを追加した。この部分は若干トリッキーであったため、備忘録として残す。

準備

  • 顧客先Excelファイル
  • Windows上の作業フォルダ(ここではC:\メール送信自動化としておく。
  • 作業フォルダの中にログファイル保存用フォルダ(ここではC:\メール送信自動化\ログとしておく)。

顧客先Excelファイルは次のようなものであった(下図は例です)。顧客先Excelファイルは作業フォルダC:\メール送信自動化にコピーしておく。
image.png

フロー作成手順

1.顧客先Excelを読み取る

1.1 Excelを起動

アクションメニューから「Excelの起動」をフローペインにドラッグ&ドロップ。開いた「Excelの起動」画面で「次のドキュメントを開く」を選択し、ドキュメントパスに、作業フォルダに保存した顧客先Excelファイルを選ぶ。
image.png

1.2 ワークシートを選択

アクションメニューから「アクティブなExcelワークシートの設定」をフローペインにドラッグ&ドロップ。開いた「アクティブなExcelワークシートの設定」画面で、ワークシート名として、顧客連絡先が入力されているワークシートの名前を入力する。
image.png

1.3 ワークシートのデータの末端セルを取得

これは、ワークシート内のデータが存在する範囲を捉えるために行う。
アクションメニューから「Excelワークシートから最初の空の列や行を取得」をフローペインにドラッグ&ドロップし、そのまま保存。
image.png

これにより、最初の空の列が%FirstFreeColumn%となり、最初の空の行が%FirstFreeRow%となる。
image.png

1.4 Excelのデータを読み取る

アクションメニューから「Excelワークシートから読み取り」をフローペインにドラッグ&ドロップし、取得「セル範囲の値」、先頭列「A」、先頭行「1」、最終列は「最初の空の列」である%FirstFreeColumn%から1列マイナスにした値「%FirstFreeColumn - 1%」、最終行も同様に%FirstFreeRow%から1行マイナスにした値「%FirstFreeRow - 1%」を入力。

この時、顧客先Excelは「メールアドレス、社名、担当者名」と最初の行に列名(ヘッダー)があるので、「範囲の最初の行に列名が含まれています」をオンにしておく(デフォルトでオン)。
image.png

1.5 Excelを閉じる

取得したデータは変数%ExcelData%に格納されたのでExcelファイルは閉じてしまう。
アクションメニューから「Excelを閉じる」をフローペインにドラッグ&ドロップ。「ドキュメントを保存しない」のまま保存。
image.png

2.ログを残すためのログファイル名を準備

2.1

現在日時をログファイル名とする。例えば「2022年05月29日14時16分.txt」という具合に。
アクションメニューから「現在の日時を取得します」をフローペインにドラッグ&ドロップ。そのまま保存。これで現在日時が変数%CurrentDateTime%に格納されることになる。
image.png

2.2 現在日時をテキストに変換

アクションメニューから「datetimeをテキストに変換」をフローペインにドラッグ&ドロップ。
変換するdatetimeが%CurrentDateTime%になっていることを確認し、カスタム形式を「yyyy年MM月dd日HH時mm分」と入力し、保存。
image.png


ここまでの完成フロー。

image.png

3.For eachループを作成

アクションメニューから「For each」をフローペインにドラッグ&ドロップ。「反復処理を行う値」として顧客先Excelから読み込んだデータが格納されている変数%ExcelData%を入力。保存。
image.png

このFor eachループの中に、Gmailでの自動送信処理と、ログを残す処理を入れ込む。

4.Gmailでのメール自動送信を設定

4.1 Gmailのアプリパスワードを取得する。
4.1.1 まず二段階認証を有効にする。
  • Chrome画面の上右端にあるアイコンをクリックし、「Googleアカウントを管理」をクリック。
    image.png

  • 左ペインのメニューで「セキュリティ」をクリック。
    image.png

  • 「Google へのログイン」欄にある、2段階認証プロセスをクリック。
    image.png

  • 「使ってみる」ボタンをクリック。
    image.png

  • パスワードを要求されるので、入力して「次へ」ボタンをクリック。

  • 「ログインの 2 つ目の手順としてスマートフォンを使用」という画面になったら、そのまま「続行」ボタンをクリック。

  • 「最後にバックアップ方法を登録」画面になったら、自分のスマフォ電話番号が表示されていることを確認して(表示されていなかったら入力して)、「送信」ボタンをクリック。

  • 自分のスマフォにテキストメッセージで確認コードが送られてくるので、それを入力し、「次へ」ボタンをクリック。
    image.png

  • 「有効にする」ボタンをクリック。
    image.png

これで二段階認証が有効化された。

4.1.2 アプリパスワードを取得する。
  • 「Googleアカウントを管理」> 「セキュリティ」の画面に戻る。
    image.png
    image.png

  • 「Google へのログイン」の欄で、「アプリパスワード」をクリック。
    image.png

  • アプリのドロップダウンリストで「メール」を選択。デバイスのドロップダウンリストで「Windowsパソコン」を選択する。「生成」ボタンをクリック。
    image.png

  • 「Windows パソコンのアプリ パスワード」が表示されるのでコピーし保存しておく。
    image.png

4.2 メール送信アクション設定。
  • アクションメニューから「メールの送信」を選び、For eachループの中にドラッグ&ドロップする。

  • 開いた「メールの送信」設定画面で以下のように設定する。パスワードは取得したアプリパスワードである。「全般」をクリック。
    image.png

  • 「全般」で以下のように送信メール内容を設定する。変数%CurrentItem%には、Excelデータが格納されている変数%ExcelData%から抜いてきた1行目のデータがある。1行目のデータは「メールアドレス」「社名」「担当者名」のデータが配列として構成されている。したがって、そこからメールアドレスを抜きたかったら%CurrentItem['メールアドレス']%となる。担当者名を抜きたかったら%CurrentItem['担当者名']%となる。

  • For eachループで、こうして%ExcelData%にある数百件のデータを1行ずつ処理していくことになる。
    image.png

  • 「保存」ボタンをクリックして「メールの送信」アクションを保存する。

5.ログ記録の設定

5.1 ログファイルにログを追記する。
  • ここがトリッキーなのだが、まだログファイルが生成されていないながらも、アクション「テキストに行を追加」を「メール送信アクション」の下にドラッグ&ドロップ。以下のように設定。
    image.png

  • 追加するテキストは、“[社名]の[担当者名]様([メールアドレス])に送信完了”というテキストログを残したいので、%CurrentItem['社名']%の%CurrentItem['担当者名']% 様(%CurrentItem['メールアドレス']%)に送信完了となる。

  • ここで「生成された変数」を見てほしい。「新しいテキスト」として%Result%変数が生成されている。つまり、%Result%が新規作成されるログのテキストデータとなる。
    image.png

  • したがって、元のテキストには%Result%を入力する。
    image.png

保存ボタンをクリック。

5.2 テキストをファイルに書き込む。

アクション「テキストをファイルに書き込みます」をドラッグ&ドロップで「テキストに行を追加」の下に挿入。開いた画面に下記のように設定。
image.png

最初に準備したログ用フォルダC:\メール送信自動化\ログに%FormattedDateTime%.txtのファイル名でログファイルを作成するため、ファイルパスはC:\メール送信自動化\ログ\%FormattedDateTime%.txtと入力する。

%FormattedDateTime%は実行したときのDateTime(現在日時)。したがって、たとえば「2022年08月08日17時58分.txt」というファイル名になる。ここもトリッキーなのだが、同名テキストファイルが無い場合は勝手に新規作成される。

「書き込むテキスト」は%Result%とする。

「新しい行を追加する」はオン。

「ファイルが存在する場合」は、存在するはずはないのでデフォルトのままで良い。


完成したFor eachループ内のフロー
image.png

以上で完成である。


課題

今回のログを残す処理は、PCの電源喪失、フリーズ、ネットワーク遮断、等々物理層・ネットワーク層の問題に対する対処であった。

しかし、よりありふれた、例えば送信先顧客メールアドレスが存在しない、あるいは顧客先Excelデータのメールアドレスに全角が混じっている、などで配信不能であった場合のエラー処理はできないだろうか?

実は「メール送信」アクションにはすでに「エラー発生時」のルールを設定できる項目がある。
image.png
image.png

「新しいルール」をクリックすると、「サブフローの実行」を選ぶことができる。
そこで「無効なメールアドレス」であったり「メールメッセージを送信できませんでした」の場合、メッセージを表示するサブフローを作成してみる。

6.サブフローで配信不能エラー対応

6.1 サブフローを作成。
  • 「サブフロー」をクリックし、「新しいサブフロー」をクリック。
    image.png

  • サブフロー名を入力。サブフロー名は英数字しか受け付けない。
    image.png

  • 新しく作成したサブフローのペインに、
    image.png
    「メッセージを表示」アクションをドラッグ&ドロップ。開いた画面で次のように設定。保存。
    image.png

6.2 「メールの送信」アクションにエラー処理を追加。
  • Mainペインに戻り、「メールの送信」アクションを開き、「エラー発生時」ボタンをクリック。
    image.png

  • 「無効なメールアドレス」の「新しいルール」をクリックし「サブフローの実行」をクリック。
    image.png

  • 先ほど作成したNotDeliveryErrorサブフローを選択する。
    image.png

  • 「メールメッセージを送信できませんでした」についても同様にNotDeliveryErrorサブフローを設定する。

  • ここで「スローエラー」を選ぶとフローはエラー発生と同時に停止する。「フロー実行を続ける」を選ぶとエラーを吐きながらも次のアクションへ移動する。どちらにせよ、エラーメッセージは出現するはず。

  • サブフローが設定されたアクションには盾アイコンが付される。
    image.png

6.3 スモークテスト。
  • 実際に、顧客先Excelデータのメールアドレスに2バイト文字を入れてみる。
    これで2回目のループで配信不能となりエラーメッセージが出るはずである。
    image.png

  • これでフロー実行させたところ、エラーメッセージは出てくれず、ループは完了してしまった。:thinking::interrobang:

  • 原因・解決方法・回避方法は調べたが分からない。何か情報あればご教示ください。よろしくお願いいたします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円)



3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2