Enviando e-mails não autenticados pelo MS Exchange com o powershell (Windows Server 2008 R2)

5

Estou tentando usar o Agendador de Tarefas para executar um script do PowerShell e enviar por e-mail a saída de alguns comandos. Estou usando "Send-MailMessage" para fazer isso. Quando executo a tarefa agendada com uma conta de administrador de domínio, recebo os emails muito bem, mas quando uso uma conta de serviço, os emails não aparecem.

A conta de serviço que estou usando tem "Logon as a Service" e "Log on as Batch Job". Ele também tem direitos de administrador local no servidor do qual estou executando.

Algo a se notar: usei o telnet para enviar e-mails pelo servidor SMTP que estou usando e consegui enviar um e-mail não autenticado, portanto, o problema não é um problema de autenticação com o servidor SMTP.

Quais credenciais estou em falta nesta conta de serviço? Há mais alguma coisa que eu possa estar faltando?

Obrigado pela ajuda!

    
por adivis12 01.10.2013 / 20:40

1 resposta

9

Quando você envia um email através de telnet e escolhe não autenticar , o servidor assume que você é anonymous (também conhecido como NT AUTHORITY\Anonymous logon ou S-1-5-7 ).

Quando Send-MailMessage envia um e-mail, ele SEMPRE tentará autenticar a sessão. Se um conjunto de credenciais não for especificado, ele assumirá que as credenciais de rede dos usuários atuais devem ser usadas e autenticadas como a conta de serviço que está executando o script do PowerShell.

A conta de serviço não é anônima, nem é um Usuário do Exchange nem um Administrador da Organização do Exchange e não terá permissão para enviar o email.

Para contornar isso, você precisará de um PSCredential objeto:

$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

Agora seu script está enviando e-mails anonimamente também: -)

Outra opção (e mais segura) é fornecer à conta de serviço em questão a permissões em um conector de recebimento:

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

Se você precisar transferir arquivos que serão potencialmente removidos pela filtragem de conteúdo ou por pessoas do mesmo tipo, também será possível ignorar os mecanismos de anti-spam:

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

Se você quiser enviar e-mails para destinatários fora da sua própria organização do Exchange, também será necessário:

$RC | Add-ADPermission -User "DOMAIN\ServiceAcc01" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient
    
por 02.10.2013 / 00:38