Powershell send-mailmessage - email para vários destinatários

Tenho este script powershell para enviar e-mails com anexos, mas quando adiciono vários destinatários, apenas o primeiro recebe a mensagem. Li A documentação e ainda não a consigo descobrir. Obrigado.

$recipients = "Marcel <[email protected]>, Marcelt <[email protected]>"

Get-ChildItem "C:\Decrypted\" | Where {-NOT $_.PSIsContainer} | foreach {$_.fullname} |
send-mailmessage -from "[email protected]" `
            -to "$recipients" `
            -subject "New files" `
            -body "$teloadmin" `
            -BodyAsHtml `
            -priority  High `
            -dno onSuccess, onFailure `
            -smtpServer  192.168.170.61
 42
Author: culter, 2012-04-20

6 answers

$recipients = "Marcel <[email protected]>, Marcelt <[email protected]>"

É o tipo de {[3] } é necessário passar para send-mailmessage a string[] Tipo (Uma matriz):

[string[]]$recipients = "Marcel <[email protected]>", "Marcelt <[email protected]>"
Acho que não usar cordas faz o trabalho das regras coercivas da powershell.
$recipients = "Marcel <[email protected]>", "Marcelt <[email protected]>"

É object[] tipo mas pode fazer o mesmo trabalho.

 74
Author: CB., 2012-04-20 07:34:52
Basta criar uma matriz Powershell para fazer o truque.
$recipients = @("Marcel <[email protected]>", "Marcelt <[email protected]>")

Pode ser utilizada a mesma abordagem para os anexos

$attachments = @("$PSScriptRoot\image003.png", "$PSScriptRoot\image004.jpg")
 18
Author: Rubanov, 2015-05-12 14:23:06

Para definir um conjunto de cadeias de caracteres é mais confortável usar $var = @('User1', 'User2').

$servername = hostname
$smtpserver = 'localhost'
$emailTo = @('username1 <[email protected]>', 'username2<[email protected]>')
$emailFrom = 'SomeServer <[email protected]>'
Send-MailMessage -To $emailTo -Subject 'Low available memory' -Body 'Warning' -SmtpServer $smtpserver -From $emailFrom
 4
Author: Alexander Shapkin, 2016-10-05 16:06:40
É verdade, cada endereço Tem de ser citado. Se você tiver vários endereços listados na linha de comando, o envio-MailMessage gosta se você especificar tanto as partes amigável humano e do endereço de E-mail.
 2
Author: markr, 2012-09-10 22:03:24

Primeiro tens de converter o texto para um Conjunto de caracteres , assim:

$recipients = "Marcel <[email protected]>,Marcelt <[email protected]>"
[string[]]$To = $recipients.Split(',')

Então use Send-MailMessage assim:

Send-MailMessage -From "[email protected]" -To $To -subject "New files" -body "$teloadmin" -BodyAsHtml -priority High -dno onSuccess, onFailure -smtpServer 192.168.170.61
 2
Author: Johan, 2017-09-06 07:44:49

Para enviar um e-mail. net / c# powershell use tal estrutura:

Para melhor comportamento, criar uma classe com um método como este

 using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddCommand("Send-MailMessage")
                                  .AddParameter("SMTPServer", "smtp.xxx.com")
                                  .AddParameter("From", "[email protected]")
                                  .AddParameter("Subject", "xxx Notification")
                                  .AddParameter("Body", body_msg)
                                  .AddParameter("BodyAsHtml")
                                  .AddParameter("To", recipients);

                // invoke execution on the pipeline (ignore output) --> nothing will be displayed
                PowerShellInstance.Invoke();
            }              

Em que esta instância é chamada numa função como:

        public void sendEMailPowerShell(string body_msg, string[] recipients)

Nunca se esqueça de usar uma string array para os receptivos, que pode ser assim:

string[] reportRecipient = { 
                        "xxx <[email protected]>",
                        "xxx <[email protected]>"
                        };

Bodymsg

Esta mensagem pode ser transferida como parâmetro para o método em si, codificação HTML activada!!

Destinatários

Nunca se esqueça de usar um string array no caso de múltiplos destinatários, caso contrário só o último endereço na string será usado!!!

Chamar a função pode ser assim:

        mail reportMail = new mail(); //instantiate from class
        reportMail.sendEMailPowerShell(reportMessage, reportRecipient); //msg + email addresses

ThumbUp

 0
Author: Ricardo Fercher, 2017-04-18 12:05:35