PowerShell を使用して電子メールを送信する方法

PowerShell 経由で電子メールを送信する場合は、Send-MailMessage コマンドレットに慣れています。残念ながら、Send-MailMessage コマンドレットは廃止されたため、使用は推奨されません。では、Send-MailMessage の代替手段は何でしょうか?答えは Send-MailKitMessage です。この記事では、PowerShell を使用して電子メールを送信する方法を学習します。

Send-MailMessage コマンドレットは廃止されました

メールメッセージの送信PowerShell 経由で電子メール メッセージを送信するコマンドレットが一般的です。残念ながら、Send-MailMessage コマンドレットは廃止されたため、今後は使用しないでください。

注記:Send-MailMessage コマンドレットは廃止されました。このコマンドレットは、SMTP サーバーへの安全な接続を保証しません。 PowerShell にはすぐに代替できるものはありませんが、Send-MailMessage は使用しないことをお勧めします。

デフォルトの PowerShell コマンドレットには代替となるものはありませんが、PowerShell から電子メール メッセージを送信するためにインストールして使用できるモジュールはあるでしょうか?はい、あります。のSend-MailKitMessageこのモジュールは、Send-MailMessage コマンドレットの優れた代替品です。

SMTPリレーを構成する

SMTP リレーを設定する場合は、次の記事をお読みください。

  • Exchange Server で匿名 SMTP リレーを構成する
  • Office 365 SMTP リレーを構成する

Send-MailKitMessage モジュールをインストールする

Send-MailKitMessage モジュールをシステムにインストールするには、以下の手順を実行します。

1. Windows PowerShell 実行ポリシーを設定する

デフォルトでは、スクリプトをインストールできません。インターネットからダウンロードするすべての PowerShell スクリプトに信頼できる発行者による署名を要求するには、PowerShell を管理者として実行し、コマンドレットを実行します。

Set-ExecutionPolicy RemoteSigned

重要:管理者特権の Windows PowerShell ウィンドウを閉じて再度開き、変更を適用します。

2.PowerShellGetモジュールをインストールする

PowerShell を管理者として実行します。コマンドを実行しますインストールモジュール PowershellGet -Force。 NuGet プロバイダーをインストールするように求められたら、 を押します。Y続いて入力

Install-Module PowershellGet -Force

インストールできないというエラーが発生した場合は、「PowerShell 用の NuGet プロバイダーをインストールできない」という記事をお読みください。

3. Send-MailKitMessage モジュールをインストールする

をインストールしますSend-MailKitMessage モジュール

Install-Module -Name Send-MailKitMessage -Force

モジュールがインストールされたので、PowerShell を使用して電子メールを送信する方法の例をいくつか見てみましょう。

Send-MailKitMessage パラメータ

Send-MailKitMessage モジュールを使用する場合は、以下のパラメーターを使用できます。

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

# Authentication ([System.Management.Automation.PSCredential], optional)
$Credential = [System.Management.Automation.PSCredential]::new("Username", (Read-Host -Prompt "Enter password" -AsSecureString))

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

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

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

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

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

# BCC list ([MimeKit.InternetAddressList] https://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

PowerShell で電子メールを送信するために使用できるテンプレートをいくつか紹介します。

次のパラメータが必要です。

  • SMTPサーバー
  • ポート
  • から
  • 受信者リスト

受信者に電子メールを送信する

この例では、送信者から受信者に電子メール メッセージを送信します。

以下も参照してください。Microsoft Graph API と PowerShell を使用して電子メールを送信する

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"This is the subject"

# Text body ([string], optional)
$TextBody = [string]"This is the text body"

# Splat parameters
$Parameters = @{
    "SMTPServer"    = $SMTPServer
    "Port"          = $Port
    "From"          = $From
    "RecipientList" = $RecipientList
    "Subject"       = $Subject
    "TextBody"      = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

受信者の受信トレイではこのように表示されます。

添付ファイル付きのメールを送信する

この例では、添付ファイル付きの電子メール メッセージを複数の受信者に送信します。

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"Sending the Attachment"

# Text body ([string], optional)
$TextBody = [string]"See the CSV file attachment."

# Attachment list ([System.Collections.Generic.List[string]], optional)
$AttachmentList = [System.Collections.Generic.List[string]]::new()
$AttachmentList.Add("C:tempFile.csv")

# Splat parameters
$Parameters = @{
    "SMTPServer"     = $SMTPServer
    "Port"           = $Port
    "From"           = $From
    "RecipientList"  = $RecipientList
    "Subject"        = $Subject
    "TextBody"       = $TextBody
    "AttachmentList" = $AttachmentList
}

# Send message
Send-MailKitMessage @Parameters

受信者の受信トレイではこのように表示されます。

メーリングリストに電子メールを送信する

この例では、CC フィールドと BCC フィールドに追加の受信者を含む電子メール メッセージをメーリング リストに送信します。

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "25"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# CC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$CCList = [MimeKit.InternetAddressList]::new()
$CCList.Add([MimeKit.InternetAddress]"[email protected]")

# BCC list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, optional)
$BCCList = [MimeKit.InternetAddressList]::new()
$BCCList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"To all the members"

# Text body ([string], optional)
$TextBody = [string]"Check out the magic."

# Splat parameters
$Parameters = @{
    "SMTPServer"     = $SMTPServer
    "Port"           = $Port
    "From"           = $From
    "RecipientList"  = $RecipientList
    "CCList"         = $CCList
    "BCCList"        = $BCCList
    "Subject"        = $Subject
    "TextBody"       = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

受信者の受信トレイではこのように表示されます。

安全な接続 (TLS) 経由で電子メールを送信する

Transport Layer Security (TLS) は、セキュリティとプライバシーを確​​保するために電子メール メッセージを暗号化するプロトコルです。

この例では、安全な接続 (TLS) 経由で受信者に認証する必要がある送信者から電子メール メッセージを送信します。

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

# Authentication ([System.Management.Automation.PSCredential], optional)
$Credential = [System.Management.Automation.PSCredential]::new("[email protected]", (Read-Host -Prompt "Enter password" -AsSecureString))

# SMTP server ([string], required)
$SMTPServer = "mail.exoip.com"

# Port ([int], required)
$Port = "587"

# Sender ([MimeKit.MailboxAddress] https://www.mimekit.net/docs/html/T_MimeKit_MailboxAddress.htm, required)
$From = [MimeKit.MailboxAddress]"[email protected]"

# Recipient list ([MimeKit.InternetAddressList] https://www.mimekit.net/docs/html/T_MimeKit_InternetAddressList.htm, required)
$RecipientList = [MimeKit.InternetAddressList]::new()
$RecipientList.Add([MimeKit.InternetAddress]"[email protected]")

# Subject ([string], optional)
$Subject = [string]"Sending with Port 587"

# Text body ([string], optional)
$TextBody = [string]"Sending the message on Port 587 (TLS)"

# Splat parameters
$Parameters = @{
    "UseSecureConnectionIfAvailable" = $UseSecureConnectionIfAvailable
    "Credential"                     = $Credential
    "SMTPServer"                     = $SMTPServer
    "Port"                           = $Port
    "From"                           = $From
    "RecipientList"                  = $RecipientList
    "Subject"                        = $Subject
    "TextBody"                       = $TextBody
}

# Send message
Send-MailKitMessage @Parameters

それでおしまい!

結論

Send-MailKitMessage モジュールを使用して PowerShell で電子メールを送信する方法を学習しました。これは、現在は使用されていない Send-MailMessage コマンドレットの優れた代替品です。モジュールをインストールしてスクリプトを調整するか、それを使用して送信 SMTP メール フローをテストします。

この記事は楽しかったですか? 「サードパーティのスパム フィルターからのメールのみを受け入れるように Microsoft 365 を構成する方法」もお勧めします。ぜひフォローしてこの記事をシェアしてください。

Related Posts