web-dev-qa-db-fra.com

Powershell send-mailmessage - e-mail à plusieurs destinataires

J'ai ce script PowerShell pour l'envoi d'e-mails avec pièces jointes, mais lorsque j'ajoute plusieurs destinataires, seul le premier reçoit le message. J'ai lu la documentation et n'arrive toujours pas à comprendre. Je vous remercie

$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
45
culter
$recipients = "Marcel <[email protected]>, Marcelt <[email protected]>"

est le type de string vous devez passer à send-mailmessage un type string[] (un tableau):

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

Je pense que ne pas lancer à la chaîne [] faire le travail pour les règles de coercition de powershell:

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

est de type object[] mais peut effectuer le même travail.

76
CB.

Créer un tableau Powershell fera l'affaire

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

La même approche peut être utilisée pour les pièces jointes

$attachments = @("$PSScriptRoot\image003.png", "$PSScriptRoot\image004.jpg")
20
Rubanov

Pour définir un tableau de chaînes, il est plus pratique d’utiliser $ 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

Vous devez d'abord convertir le string en un tableau string, comme ceci:

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

Puis utilisez Send-MailMessage comme ceci:

Send-MailMessage -From "[email protected]" -To $To -subject "New files" -body "$teloadmin" -BodyAsHtml -priority High -dno onSuccess, onFailure -smtpServer 192.168.170.61
3
Johan

C'est vrai, chaque adresse doit être citée. Si vous avez plusieurs adresses répertoriées sur la ligne de commande, Send-MailMessage l’apprécie si vous spécifiez les parties adresse conviviale et adresse électronique.

2
markr

pour envoyer un courriel .NET/C # powershell, utilisez une telle structure:

pour un meilleur comportement, créez une classe avec une méthode comme celle-ci

 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();
            }              

Ces instances sont appelées dans une fonction comme:

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

N'oubliez jamais d'utiliser un tableau de chaînes pour les destinataires, qui peut ressembler à ceci:

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

body_msg

ce message peut être saturé en paramètre de la méthode elle-même, le codage HTML activé !!

destinataires

n'oubliez jamais d'utiliser un tableau de chaînes en cas de destinataires multiples, sinon seule la dernière adresse de la chaîne sera utilisée !!!

l'appel de la fonction peut ressembler à ceci:

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

Pouce en l'air

0
Ricardo Fercher