PowerShellでメールを送信する方法(MailKit使用)

SE Tips

Windowsサーバーでアプリケーションを稼働していると、Windowsの機能でメール送信ができないか検討することがあります。

今回は現在のWindowsでは標準的に備わっているPowershellを使用してメールを送信する方法を共有します。

注意点

以前まではSend-MailMessageコマンドレットでメール送信できましたが、Microsoftより非推奨となったため現在は使用できません。

警告
Send-MailMessage コマンドレットは廃止されました。 このコマンドレットでは、SMTP サーバーへのセキュリティで保護された接続は保証されません。 PowerShell ですぐに置き換える機能はありませんが、使用しないことを Send-MailMessageお勧めします。 詳細については、「プラットフォーム互換性に関するメモ DE0005」を参照してください。

引用元:Microsoft Send-MailMessageリファレンス

代替ツールとして、サードパーティ製ではありますがMailKitの使用をMicrosoftが推奨してますので、当該ツールを導入して使用します。

環境準備

MailKitツールの導入

※サンプル画像はWindows Server 2019のものです

  1. Windowsメニューより、Powershellを管理者モードで起動します。
  2. 以下のコマンドを実行して、MailKitツールをインストールします。
    実行コマンド:Install-Module -Name Send-MailKitMessage
  3. キー入力を要求してきたら「Y」を入力します。
    (以下の画像では2回要求してきました)
  4. ツールがインストールされたことを確認します。
    (エクスプローラで以下のフォルダにファイルが有ることを確認)
    インストール先フォルダ:C:\Program Files\WindowsPowerShell\Modules\Send-MailKitMessage

以上でSend-MailMessageの代替ツールとなるSend-MailKitMessage(MailKitツール)の準備は完了です。

Gmailのsmtpサーバー利用準備

今回の例ではGmailのsmtpサーバーを経由してメール送信をする方法を紹介します。

Gmail側の準備をします。

Gmail接続するユーザーの2段階認証有効化

Gmailのsmtpサーバーに接続するユーザー(送信アドレス)で2段階認証を有効にします。

  1. Googleアプリメニューより「アカウント」をクリックします。
  2. 左ペインのメニューより「セキュリティ」をクリックします
  3. Googleにログインする方法より「2段階認証プロセス」の「>」マークをクリックします

  4. 2段階認証プロセスより「使ってみる」をクリックします
  5. 2段階認証時に認証キー(SMS)を受け取る携帯番号を入力し、「次へ」をクリックします
  6. 入力した携帯にシュートメッセージが届きますので、メッセージに記載されている認証キーを入力し、「次へ」をクリックします
  7. 「有効にする」をクリックします

以上で2段階認証の有効化は完了です。画面の2段階認証プロセスに「xx:xx より有効」が表示されます

アブリパスワードの作成

続いてMailKitツールからメール送信する際に使用するアブリパスワードを作成します。

  1. 「アカウント」-「セキュリティ」のGoogleにログインする方法より「2段階認証プロセス」の「>」マークをクリックします
  2. 遷移後の画面の一番下までスクロールさせ、「アプリパスワード」の「>」マークをクリックします
  3. App name欄に任意のアプリケーション名を入力し「作成」をクリックします
  4. アブリパスワードが表示されるので控えます。(MailKitツールで使用します)
    その後、「完了」をクリックします

以上でGmailの準備は完了です。

メール送信方法

当該ツールのサイトに使用方法が記載されているので、その方法で実行します。

すべてのパラメータ版
※引用元:Send-MailKitMessage(austinericさん)のGitHubライブラリ

using module Send-MailKitMessage;

#use secure connection if available ([bool], optional)
$UseSecureConnectionIfAvailable = $true;

#authentication ([System.Management.Automation.PSCredential], optional)
$Credential = [System.Management.Automation.PSCredential]::new("Username", (ConvertTo-SecureString -String "Password" -AsPlainText -Force));

#SMTP server ([string], required)
$SMTPServer = "SMTPServer";

#port ([int], required)
$Port = PortNumber;

#sender ([MimeKit.MailboxAddress] http://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"SenderEmailAddress";

#recipient list ([MimeKit.InternetAddressList] http://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new();
$RecipientList.Add([MimeKit.InternetAddress]"Recipient1EmailAddress");

#cc list ([MimeKit.InternetAddressList] http://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$CCList = [MimeKit.InternetAddressList]::new();
$CCList.Add([MimeKit.InternetAddress]"CCRecipient1EmailAddress");

#bcc list ([MimeKit.InternetAddressList] http://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$BCCList = [MimeKit.InternetAddressList]::new();
$BCCList.Add([MimeKit.InternetAddress]"BCCRecipient1EmailAddress");

#subject ([string], optional)
$Subject = [string]"Subject";

#text body ([string], optional)
$TextBody = [string]"TextBody";

#HTML body ([string], optional)
$HTMLBody = [string]"HTMLBody";

#attachment list ([System.Collections.Generic.List[string]], optional)
$AttachmentList = [System.Collections.Generic.List[string]]::new();
$AttachmentList.Add("Attachment1FilePath");

#splat parameters
$Parameters = @{
    "UseSecureConnectionIfAvailable" = $UseSecureConnectionIfAvailable    
    "Credential" = $Credential
    "SMTPServer" = $SMTPServer
    "Port" = $Port
    "From" = $From
    "RecipientList" = $RecipientList
    "CCList" = $CCList
    "BCCList" = $BCCList
    "Subject" = $Subject
    "TextBody" = $TextBody
    "HTMLBody" = $HTMLBody
    "AttachmentList" = $AttachmentList
};

#send message
Send-MailKitMessage @Parameters;
  1. スクリプトを編集する
    赤枠の①smtpユーザー、②アブリパスワード、③smtpサーバー、④smtpポート番号、⑤送信元アドレス、⑥送信先アドレスとあとは、⑦メール件名、⑧メール本文を編集します
    青枠の⑨コマンドパラメータ指定箇所から不要な項目を削除します
    ※今回は、CC宛先、BCC宛先、HTMLメール本文、添付ファイル項目の箇所は除きました
  2. 編集したスクリプトをPowershellにコピー&ペーストし、Send-MailKitMessageコマンドレットを実行します
  3. エラーメッセージなど出力されなければメールは送信されたと思います
  4. Gmailにログインし、テストメールが受信されていることを確認します


まとめ

Send-MailKitMessageコマンドレットを使用することで、Powershellよりメールを送信することができました。

イベントログよりエラーを検知した際のメール送信などで活用できると思います。

今回の記事がご参考になれば幸いです。

最後まで読んで頂き有難うございました。

案内

このブログはスタードメインでドメインを取得した際に提供される無料サーバーで運営しています。
ドメイン代金のみで、ストレージ容量が20GBもあるサーバーが利用できるのでお得感満載です。
ブログをやってみたいと思われているお方、下記画像もしくはQRコードよりサービス内容をご確認頂けます。

タイトルとURLをコピーしました