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