Microsoft 365(Exchange Online)環境でスクリプトからメールが送信できないときに確認すること
Web サイトでフォームからの問い合わせをメールで受け取るような仕組みを作ることって割と多いと思います。このような仕組みを実装する場合、ふた昔前は SMTP サーバを指定するだけで OK でしたが、スパム送信の温床となったことから、ひと昔前からは、SMTP 認証を使うようになりました。つまり、ID とパスワードで認証して、パスした場合だけメール送信できるわけです。
この SMTP 認証によるメール送信機能の実装は、スクリプトを自作する場合だけでなく、WordPress などの CMS や複合機からのファックス受信のメール通知などでも多く使われています。
しかし、この SMTP 認証も ID とパスワードだけで認証が通ってしまうので、最近ではより安全な OAuth による認証などに移行しつつあります。
前口上が長くなってしまいましたが、最近の Microsoft 365(Exchange Online)も、上記のようなリスクを考慮し、SMTP 認証によるメール送信機能をデフォルトで禁止しています。現在のテナントの設定は PowerShell から確認することができます。
$UserCredential = Get-Credential
# Microsoft 365 のログイン情報を入力
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
Get-TransportConfig | Format-List SmtpClientAuthenticationDisabled
最後のコマンドの実行結果が SmtpClientAuthenticationDisabled : True
になっていた場合は、テナントで SMTP 認証によるメール送信機能が禁止されています。
上記のように、基本的な考え方としては、SMTP 認証によるメール送信機能を使わないほうがよいので、SmtpClientAuthenticationDisabled : False
になっていた場合は、以下のコマンドを実行してデフォルトを禁止に変更します。
Set-TransportConfig -SmtpClientAuthenticationDisabled $true
そのうえで、個々のユーザーに対して、SMTP 認証によるメール送信機能を許可する場合には、以下のコマンドを実行します。
Set-CASMailbox -Identity yamada@example.com -SmtpClientAuthenticationDisabled $false
ユーザーに対する SMTP 認証によるメール送信機能の許可状況は
Get-CASMailbox -Identity yamada@example.com | Format-List SmtpClientAuthenticationDisabled
で確認できます。SmtpClientAuthenticationDisabled : False
の場合は(明示的に)送信可SmtpClientAuthenticationDisabled : True
の場合は(明示的に)送信不可SmtpClientAuthenticationDisabled :
の場合はテナントの設定に従う
です。
この設定は、ユーザーに SMTP サーバの利用権があることが前提となるため、共有メールボックスや配布グループ、Microsoft 365 グループでは使用できません。これらのメールアドレスを使ってメール送信しようとする場合には、別の設定が必要となりますが、それについては機会があれば書いてみたいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません