Office 365 Direct Send と PowerShell を使用してメールを送信する方法

Office 365を使用してPowerShellで電子メールを送信することができることをご存知ですか?この記事では、Office 365 Direct SendとPowerShellのSend-MailMessageコマンドレットを使用して電子メールを送信する方法について学びます。

PowerShellで電子メールを送信する方法について詳しく知りたい場合は、Send-MailMessageの詳細なチュートリアルをご覧ください。

Office 365 Direct Send vs. SMTP Client Submission

PowerShellに進む前に、Office 365を使用して電子メールを送信する方法は1つだけではありません。Office 365では、電子メールを送信するための2つのサポートされた方法があります。それらのオプションはDirect SendSMTP Client SubmissionまたはSMTP Authenticated Submissionです。

SMTP Authenticated Submission

SMTP Authenticated Submissionは設定が最も簡単です。このオプションを選択すると、デバイスやアプリケーションから組織内外の受信者にメールを送信することができます。これを許可するためにOffice 365で追加の操作は必要ありません。

このオプションでは、任意の送信者アドレスを使用することができます。ただし、アドレスは確認済みの受け入れドメインのいずれかである必要があります。

SMTP Authenticated Submissionを使用するには、以下の条件を満たす必要があります:

  • ライセンスされたOffice 365ユーザーメールボックスを持っていること。このメールアドレスがメッセージの送信者として表示されます。
  • PowerShell(または他のクライアント)がsmtp.office365.comを解決し、到達できる必要があります。
  • クライアントからOffice 365へのTCPポート587または25が開いている必要があります。

Direct Send

少し複雑さを増して、Direct Sendオプションがあります。 SMTP認証付き送信と同様に、Direct Sendを使用すると、任意の送信者アドレスを使用できます。また、fromアドレスは、確認済みの受け入れドメインのいずれかである必要があります。

Direct SendSMTP認証付き送信の大きな違いは、外部の受信者が許可されていないことです。組織外の電子メール受信者に送信する必要がある場合、Direct Sendは機能しません。

Direct Sendには、いくつかの要件/推奨事項があります:

  • この送信者アドレスは、有効なメールボックスである必要はありません。ただし、このアドレスを使用してNDR(非配送報告)や返信を受け取る予定がある場合は必要です。
  • クライアントからOffice 365へのTCPポート25が開放されていること。
  • デバイスは、MXエンドポイントURL(例:yourdomain-com.mail.protection.outlook.com)を解決して到達できる必要があります。
  • A static public IP address. This is to update your SPF record and avoid your messages getting flagged as spam (optional but recommended)

MXエンドポイントURLを見つける方法がわからない場合は、以下の簡単なチュートリアルをご覧ください:

  1. Office 365管理ポータルにログインします。
  2. セットアップをクリックし、ドメインを選択し、ドメイン名をクリックし、MX Points to address or valueをコピーします。
Finding Office 365 MX Endpoint URL

SMTP認証付き送信

電子メールを送信する最初の方法は、SMTPクライアントの送信またはSMTP認証付き送信を使用することです。PowerShellのSend-MailMessageコマンドレットを使用することで、Office 365を介して電子メールを送信するために必要なすべてのパラメータを提供できます。

以下は、この方法でメールを送信するために使用できるスニペットです。

まず、PowerShell PScredentialオブジェクトを定義し、Send-MailMessageが必要とするすべてのパラメータを提供する必要があります。

# 資格情報を取得
$credential = Get-Credential

## Send-MailMessageのパラメータを定義
$mailParams = @{
    SmtpServer                 = 'smtp.office365.com'
    Port                       = '587' # またはTLSを使用しない場合は '25'
    UseSSL                     = $true ## 使用しない場合は非-TLS
    Credential                 = $credential
    From                       = '[email protected]'
    To                         = '[email protected]', '[email protected]'
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = 'This is a test email using SMTP Client Submission'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## メッセージを送信
Send-MailMessage @mailParams

上記のコードを実行すると、内部の受信者(yourdomain.com)および外部のドメイン(notyourdomain.com)によってメールが受信されるはずです。

Internal Email
External email

直接送信(TLSが必要)

SMTP認証済み送信と同様に、Send-MailMessageにはほぼ同じパラメータを使用できます。ただし、この場合、Toの受信者は内部のみになります。

また、PSCredentialは必要ありません。

## パラメータを構築
$mailParams = @{
    SmtpServer                 = '<tenant>.mail.protection.outlook.com'
    Port                       = '25'
    UseSSL                     = $true   
    From                       = '[email protected]'
    To                         = '[email protected]'
    Subject                    = "Direct Send $(Get-Date -Format g)"
    Body                       = 'This is a test email using Direct Send'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## メールを送信
Send-MailMessage @mailParams
Direct Send email

概要

Office 365では、メールを送信するための2つの異なるオプションが提供されています。この記事では、両方を示す例としてPowerShellを使用しましたが、必ずしもPowerShellを使用する必要はありません。アプリケーションやプログラミング言語がTLS認証をサポートしている限り、好きな方法を使用できます。

さらに読む

Source:
https://adamtheautomator.com/office-365-direct-send/