
これまで新システムのパスワードを社員に知らせるなどの目的で、
Excel VBAでCDO(Microsoft Collaboration Data Objects)を呼び出して、個々の社員に別内容のメールを送るということをやっていました。
2022年10月1日に、Exchange Onlineでの基本認証が廃止されることになりました。
CDOを使うやり方が継続できるか怪しくなり、代替手段を探す必要が出てきました。
Exchange Online での基本認証の廃止
Power Automateで代替できます。
Googleスプレッドシートの内容を読み取り、Microsoft365で個々の社員に別内容のメールを送る例をご紹介します。
Google スプレッドシートでの準備作業
まずはGoogleスプレッドシートからです。
メール送信したい内容を入力する器になります。
※Googleアカウントを持っていない場合は、取得してください。
Google アカウントの作成
Googleドライブを開きます。

画面左上「新規」をクリックし、
「Google スプレッドシート」をクリックします。


ファイルに名前をつけて、メール送信したいデータ項目名を1行目に入力します。
※後でPower Automateから参照するため、わかりやすいファイル名・項目名にします。
※以下キャプチャの右端にある「__PowerAppsId__」は入力不要です。Power Automateが自動で追加します。
メール送信したい内容を入力する器になります。
※Googleアカウントを持っていない場合は、取得してください。
Google アカウントの作成
Googleドライブを開きます。

画面左上「新規」をクリックし、
「Google スプレッドシート」をクリックします。


ファイルに名前をつけて、メール送信したいデータ項目名を1行目に入力します。
※後でPower Automateから参照するため、わかりやすいファイル名・項目名にします。
※以下キャプチャの右端にある「__PowerAppsId__」は入力不要です。Power Automateが自動で追加します。
これでGoogle スプレッドシートでの準備作業は完了です。
Power Automateでの準備作業
次はメール送信してくれるPower Automateでの作業です。
Microsoft365のタイルから、「Power Automate」をクリックします。

「作成」をクリックし、
「スケジュール済みクラウドフロー」をクリックします。

「フロー名」を入力します。(後から変更可能です)
「繰り返し間隔」を「12」「月」にします。(後から変更可能です)
※「1分」など短い時間を指定し、「スプレッドシートにデータ入力して1分待てばメール送信」のような形にすることもできます。ただあまり頻度を高くするとエラーが記録されます。肝心な時に動かないのも怖いので、私は頻度を低くして手動で実行しています・・・
「作成」をクリックします。

以下の画面が出た場合、Googleにサインインし、「続行」をクリックします。

ここからPower Automateのメイン部分の処理を設定します。
以下5つのステップで構成します。
・1.Googleスプレッドシートのデータを読み込む
・2.添付ファイルの情報を読み込む
・3.添付ファイル本体のデータを読み込む
・4.メールを送る
・5.Googleスプレッドシートのデータを削除する
※今回は一例として、OneDrive for Business上のファイルを添付します。
添付ファイル不要な場合は、2と3の設定をスキップしてください。
・1.Googleスプレッドシートのデータを読み込む
「新しいステップ」をクリックします。

「google」で検索し、
「Google Sheets」をクリックします。
Microsoft365のタイルから、「Power Automate」をクリックします。

「作成」をクリックし、
「スケジュール済みクラウドフロー」をクリックします。

「フロー名」を入力します。(後から変更可能です)
「繰り返し間隔」を「12」「月」にします。(後から変更可能です)
※「1分」など短い時間を指定し、「スプレッドシートにデータ入力して1分待てばメール送信」のような形にすることもできます。ただあまり頻度を高くするとエラーが記録されます。肝心な時に動かないのも怖いので、私は頻度を低くして手動で実行しています・・・
「作成」をクリックします。

以下の画面が出た場合、Googleにサインインし、「続行」をクリックします。

Power Automateのメイン部分設定
以下5つのステップで構成します。
・1.Googleスプレッドシートのデータを読み込む
・2.添付ファイルの情報を読み込む
・3.添付ファイル本体のデータを読み込む
・4.メールを送る
・5.Googleスプレッドシートのデータを削除する
※今回は一例として、OneDrive for Business上のファイルを添付します。
添付ファイル不要な場合は、2と3の設定をスキップしてください。
・1.Googleスプレッドシートのデータを読み込む
「新しいステップ」をクリックします。

「google」で検索し、
「Google Sheets」をクリックします。

「複数行を取得」をクリックします。

フォルダアイコンと下向き三角をクリックし、
Googleドライブ内のファイルとシート名を指定します。
「新しいステップ」をクリックします。

・2.添付ファイルの情報を読み込む
「ファイル」で検索し、「OneDrive for Business」をクリックします。

「ファイル メタデータの取得」をクリックします。
※ファイル名とファイル本体は別々に取得する必要があります。面倒ですね・・・

フォルダのアイコンをクリックし、OneDrive上の添付ファイルを指定します。
「新しいステップ」をクリックします。

・3.添付ファイル本体の情報を読み込む
「ファイル」で検索し、「OneDrive for Business」をクリックします。

「ファイル コンテンツの取得」をクリックします。

フォルダのアイコンをクリックし、OneDrive上の添付ファイルを指定します。
「新しいステップ」をクリックします。

・4.メールを送る
「コントロール」をクリックします。

「Apply to each」をクリックします。

「以前の手順から出力を選択」項目をクリックし、
「動的なコンテンツ」から「複数行を取得」内の「レコード value」をクリックします。
「アクションの追加」をクリックします。

「メール」で検索し、「Office 365 Outlook」をクリックします。

「メールの送信 (V2)」をクリックします。

「宛先」をクリックし、「動的なコンテンツの追加」をクリックします。

「複数行を取得」内の「送信先メールアドレス」をクリックします。

同様に「件名」「本文」を「動的なコンテンツ」から指定します。
※以下はIDとパスワードを個別に知らせる例です。Wordの差し込み印刷のように、本文の中に変動する部分(Googleスプレッドシートの内容)を差し込むことができます。
「詳細オプションを表示する」をクリックします。

「添付ファイル 名前」をクリックし、
「動的なコンテンツ」から「ファイル メタデータの取得」内の「名前」をクリックします。
※添付ファイルをつけない場合はこの設定は不要です。

「添付ファイル コンテンツ」をクリックし、
「動的なコンテンツ」から「ファイル コンテンツの取得」内の「ファイル コンテンツ」をクリックします。
※添付ファイルをつけない場合はこの設定は不要です。

「新しいステップ」をクリックします。

・5.Googleスプレッドシートのデータを削除する
「コントロール」をクリックします。

「Apply to each」をクリックします。
※さっきとはまた別の「Apply to each」です。

「以前の手順から出力を選択」をクリックし、
「動的なコンテンツ」から「複数行を取得」内の「レコード value」をクリックします。
「アクションの追加」をクリックします。

「google」で検索し、「Google Sheets」をクリックします。

「行の削除」をクリックします。

先ほど同様、Googleスプレッドシートのファイルとシート名を指定します。
「行 ID」をクリックし、
「動的なコンテンツ」から「複数行を取得」内の「__PowerAppsId__」をクリックします。
※「複数行の削除」というアクションがないので、1行ずつ削除するアクションをループで回す形になっています。行の特定に「__PowerAppsId__」を使っています。

「保存」をクリックします。

これでPower Automateでの準備作業は完了です。
※設定の全体像は以下になります。
(いくつか上記と違う部分があります。ご了承ください)

※2022.9.29追記
上記のやり方では、添付ファイルなしの場合と添付ファイルありの場合の2つのフローが必要でした。
Googleスプレッドシートに添付ファイルへのOneDriveのパスを入力するようにし、このセルの値で処理を分岐させることで、フローを1つにしました。
以下をご覧ください。
Power Automateで空白を判定して処理を分岐させる一例
メール送信
実際にメール送信します。
0.Power Automateのフローがオフの場合は、オンにします。

1.Google スプレッドシートに送信したいデータを入力します。

2.Power Automateフローを実行します。

3.Google スプレッドシートに「__PowerAppsId__」列が自動で追加され、その下に長い文字列が表示されます。
※Power Automateから認識された印にもなります。
0.Power Automateのフローがオフの場合は、オンにします。

1.Google スプレッドシートに送信したいデータを入力します。

2.Power Automateフローを実行します。

3.Google スプレッドシートに「__PowerAppsId__」列が自動で追加され、その下に長い文字列が表示されます。
※Power Automateから認識された印にもなります。
※Power Automateフローの初回実行は時間がかかります。(10分くらい?)
「動かない!」と焦らず、気長にお待ちください。
1度動けばその次からはサクサクと動きます。
実際にメール送信する前には、必ず自分のメールアドレス宛などに送信テストをしてください。
間違ったデータを大量に送信すると、問い合わせが殺到しますので…
Googleスプレッドシートのデータが自動で削除されない場合は、
Power Automate側でエラーが出ているので修正します。
エラー表示されず、ずっとリトライし続けることも多いです。
そうなると地味~なトライ&エラーが必要です。これが辛い・・・
以前は個別にパスワードを知らせる用途もありましたが、最近はシステムからリセットメール送信し、各個人でパスワード決めてね、という形が多いかもしれません。
以前は個別にパスワードを知らせる用途もありましたが、最近はシステムからリセットメール送信し、各個人でパスワード決めてね、という形が多いかもしれません。
ただこの記事はPower Automateの練習にはなると思います。
Power Automateはちょっとしたことで動かなくなるので、
試行錯誤する際は「名前を付けて保存」でフローを複製しておくのをお忘れなく。