PowerShell 用のマイクロソフト グラフ SDK を使用して Alternate からオンラインで電子メールを送信する
グラフの探索 PowerShell SDK
最近、PowerShell で Microsoft グラフを使用して、Microsoft 365 内の一般的な管理タスクを自動化する方法を模索してきました。PowerShell でグラフ API の使用を検討する最近の要因の中には、次のものがあります。
私は使用しました パワーシェル用のマイクロソフトグラフSDK 最初の問題を解決し、ネイティブ Graph API が 2 番目の問題を呼び出します。この記事では、次の代替手段について説明します。 メールメッセージの送信 を使用してコマンドレットを使用して、 新しいMgUserメッセージ そして 送信 – MgUser メッセージ 新しい従業員にウェルカム メッセージを作成して送信するための、SDK からのコマンドレット。
ウェルカムメール
組織は、オンボーディング プロセスの一環として、新しい従業員にウェルカム メールを送信します。電子メールには通常、組織で働くことや、カフェテリアを見つける方法など、新入社員が知っておくべきことに関する役立つヒントが含まれています。この処理を自動化するために、スクリプトは次の処理を実行します。
- Exchange Online に接続して、過去 7 日間に追加された従業員のメールボックスを検索します。
- Microsoft グラフに接続して、電子メールを作成して送信します。グラフへのすべての接続と同様に、データにアクセスするためのアクセス許可が必要です。この場合、我々は必要です 送信 そして メール.読み取り書き込み 権限。スクリプトは対話式に実行されるため、スクリプトは サービス プリンシパルのアクセス許可クリープに注意する グラフに接続するために使用されます。
- 見つかったセット内の各メールボックスに対して、 新しいMgUserメッセージ コマンドレットを使用して、サインインしているユーザーのメールボックスに HTML メッセージを作成します。
- を使用してメッセージを送信します。 送信 – MgUser メッセージ コマンドレット。
スクリプトは基本的なものです(以下のことができます。 GitHub からダウンロードする)が、校長を証明するのに十分である。添付ファイル (新しい従業員ガイドなど) を追加するか、受信者のセットを変更することで、添付ファイルを装飾できます。私たちは後でそれらのポイントに到達します。
接続するコード
グラフに接続するコードは簡単です。
接続 MgGraph -テナント Id a562313f-14fc-43a2-9a7a-d2e27f4f3478 -スコープ “Mail.Send, Mail.ReadWrite"
$Details = 取得-Mg コンテキスト
$Scopes = $Details |選択 – 展開プロパティ のスコープ
$Scopes = $Scopes – 結合 “, "
$ProfileName = (取得-Mgプロファイル)。名前
$TenantName = (ゲット・Mg組織)。表示名
繋ぐ–Mgグラフ –テナントID a562313f–14fc–43a2–9a7a–d2e27f4f3478 –スコープ “メール.送信、メール.読み取り書き" $細部 = 取得–Mg コンテキスト $スコープ = $細部 | 選ぶ –プロパティを展開します。 スコープ $スコープ = $スコープ –接続 “, “ $プロファイル名 = (取得–Mgプロファイル).名前 $テナント名 = (取得–Mg組織).表示名 |
ザ コネクト・Mgグラフ コマンドレットは、テナント識別子を使用してテナントに接続し (テナントに適切な値を使用していることを確認してください)、必要な 2 つのアクセス許可を要求します。Graph SDK で使用されるサービス プリンシパルがこれらのアクセス許可に対する同意をまだ保持していない場合、Graph は同意を求めます。他のコマンドは、ログインコンテキストと組織名の詳細を取得します。
ターゲット メールボックスの検索
ターゲット メールボックスを検索するコードは、過去 7 日間に作成されたメールボックスを検索します。繰り返しますが、それは非常に簡単です:
[string]$チェック日付 = (ゲt–日付).追加日(–7) # 対象期間内に作成されたすべてのメールボックスを検索する [array]$ユーザー = (取得–エキソメールボックス –フィルター 「メールボックス作成時 -gt '$CheckDate’」 –受信者の種類の詳細 ユーザーメールボックス –結果サイズ 無制限の –プロパティ メールボックスが作成された場合 | 選ぶ メールボックスが作成された場合, 表示名, ユーザープリンシパル名, プライマリSmtpアドレス) もし ($ユーザー –eq $ヌル) { 書く–ホスト (“{0}前に作成されたメールボックスが見つかりませんでした。出て行く! –f $チェック日付) } |
メッセージの作成と送信
一連のターゲット メールボックスを見つけた後、各メールボックスをループしてカスタマイズされた HTML メッセージを作成し (図 1)、次の手順で必要なメッセージ プロパティのセットを設定します。 送信 – MgUser メッセージ 新しいメッセージを受信者に送信するコマンドレット。

# 新しいメールボックスのそれぞれにウェルカム 電子メール メッセージを作成して送信する
ForEach ($Usersの$User) {
# メールボックスのプライマリ SMTP アドレスを使用して受信者を追加する
$EmailRecipient = $User.プライマリSmtpアドレス
$EmailAddress = @{アドレス = $User.PrimarySmtpAddress}
$EmailRecipient = @{電子メールアドレス = $EmailAddress}
書き込みホスト 「ウェルカム メールを送信する」 $User表示名
# メッセージをカスタマイズする
$htmlHeaderUser = “
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 新しいメールボックスのそれぞれにウェルカム 電子メール メッセージを作成して送信する
フォーリーチ
($利用者 で
$ユーザー)
{
# メールボックスのプライマリ SMTP アドレスを使用して受信者を追加する
$電子メール受信者
=
$利用者.プライマリSmtpアドレス
$電子メール アドレス
=
@{住所
=
$利用者.プライマリSmtpアドレス}
$電子メール受信者
=
@{電子メール アドレス
=
$電子メール アドレス}
書く–ホスト
「ウェルカムメールの送信」
$利用者.表示名
# メッセージをカスタマイズする
$ユーザー
=
“
+
$利用者.表示名
+
“
$htmlbody
=
$ユーザー
+
$htmlline1
+
$htmlline2
+
$3
+
“
$HtmlMsg
=
“ボディ>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 新しいメールボックスのそれぞれにウェルカム 電子メール メッセージを作成して送信する フォーリーチ ($利用者 で $ユーザー) { # メールボックスのプライマリ SMTP アドレスを使用して受信者を追加する $電子メール受信者 = $利用者.プライマリSmtpアドレス $電子メール アドレス = @{住所 = $利用者.プライマリSmtpアドレス} $電子メール受信者 = @{電子メール アドレス = $電子メール アドレス} 書く–ホスト 「ウェルカムメールの送信」 $利用者.表示名 # メッセージをカスタマイズする
$ユーザー
=
“
$htmlbody
=
$ユーザー
+
$htmlline1
+
$htmlline2
+
$3
+
“
$HtmlMsg
=
“ボディ> |