タスクスケジューラを使用してPowerShellスクリプトを実行し、いくつかのコマンドの出力を電子メールで送信しようとしています。 「Send-MailMessage」を使用してこれを行っています。ドメイン管理者アカウントでスケジュールされたタスクを実行すると、メールは問題なく受信されますが、サービスアカウントを使用すると、メールが届きません。
私が使用しているサービスアカウントには、「サービスとしてログオン」と「バッチジョブとしてログオン」の両方があります。また、これを実行しているサーバーのローカル管理者権限もあります。
注意点:使用しているSMTPサーバー経由でtelnetを使用して電子メールを送信しており、認証されていない電子メールを送信できたため、問題はSMTPサーバーの認証の問題ではありません。
このサービスアカウントにはどの認証情報がありませんか?他に見逃している可能性があるものはありますか?
助けてくれてありがとう!
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