web-dev-qa-db-ja.com

PowerShellを使用してMS Exchange経由で認証されていないメールを送信する(Windows Server 2008 R2)

タスクスケジューラを使用してPowerShellスクリプトを実行し、いくつかのコマンドの出力を電子メールで送信しようとしています。 「Send-MailMessage」を使用してこれを行っています。ドメイン管理者アカウントでスケジュールされたタスクを実行すると、メールは問題なく受信されますが、サービスアカウントを使用すると、メールが届きません。

私が使用しているサービスアカウントには、「サービスとしてログオン」と「バッチジョブとしてログオン」の両方があります。また、これを実行しているサーバーのローカル管理者権限もあります。

注意点:使用しているSMTPサーバー経由でtelnetを使用して電子メールを送信しており、認証されていない電子メールを送信できたため、問題はSMTPサーバーの認証の問題ではありません。

このサービスアカウントにはどの認証情報がありませんか?他に見逃している可能性があるものはありますか?

助けてくれてありがとう!

5
adivis12

telnetを介してメールを送信し、認証しないことを選択すると、サーバーはanonymous(別名有名なNT AUTHORITY\Anonymous logonまたはS-1-5-7)。

いつ - Send-MailMessage メールを送信します。常にセッションの認証を試みます。資格情報のセットが指定されていない場合、現在のユーザーのネットワーク資格情報が使用されると想定され、PowerShellスクリプトを実行するサービスアカウントとして認証されます。

サービスアカウントは匿名でも、ExchangeユーザーでもExchange組織管理者でもないため、電子メールの送信は許可されません。

これを回避するには、 PSCredential オブジェクトが必要です。

$anonUsername = "anonymous"
$anonPassword = ConvertTo-SecureString -String "anonymous" -AsPlainText -Force
$anonCredentials = New-Object System.Management.Automation.PSCredential($anonUsername,$anonPassword)

Send-MailMessage -to "Big Boss <[email protected]>" -from "Me <[email protected]>" -subject "It's working! EOM" -credential $anonCredentials

これで、スクリプトは匿名でメールも送信しています:-)


別の(そしてより安全な)オプションは、問題のサービスアカウントに受信コネクタで必要な permissions を与えることです。

$RC = Get-ReceiveConnector "ConnectorNameGoesHere" 
$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Submit,ms-Exch-SMTP-Accept-Authoritative-Domain-Sender

コンテンツフィルタリングなどによって削除される可能性のあるファイルを転送する必要がある場合は、スパム対策メカニズムをバイパスすることもできます。

$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-Bypass-Anti-Spam

自分のExchange組織の受信者の外部に電子メールを送信する場合は、それも許可する必要があります。

$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient
9