it-swarm.com.de

Powershell-Sendemail-Nachricht - E-Mail an mehrere Empfänger

Ich habe dieses Powershell-Skript zum Versenden von E-Mails mit Anhängen, aber wenn ich mehrere Empfänger hinzufüge, erhält nur der erste die Nachricht. Ich habe die Dokumentation gelesen und finde es immer noch nicht heraus. Vielen Dank

$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]>"

ist der Typ von string, den Sie an send-mailmessage übergeben müssen, einen string[]-Typ (ein Array):

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

Ich denke, dass das Casting auf string [] nicht die Zwangsregeln für Powershell erfüllt:

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

ist object[], kann aber denselben Job ausführen.

76
CB.

Das Erstellen eines PowerShell-Arrays reicht aus

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

Der gleiche Ansatz kann für Anhänge verwendet werden

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

Um ein Array von Strings zu definieren, ist es bequemer, $ Var = @ ('User1', 'User2') zu verwenden.

$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

Sie müssen zuerst das string in ein string-Array konvertieren, wie folgt:

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

Dann benutze Send-MailMessage so:

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

Das ist richtig, jede Adresse muss angegeben werden. Wenn in der Befehlszeile mehrere Adressen aufgeführt sind, gefällt es Send-MailMessage, wenn Sie sowohl den benutzerfreundlichen als auch den E-Mail-Adressbereich angeben.

2
markr

hier ist eine vollständige (Google Mail) und einfache Lösung ... verwenden Sie einfach normal; Trennzeichen .. am besten als Parameter übergeben.

$to = "[email protected];[email protected]"
$user = "[email protected]"    
$pass = ConvertTo-SecureString -String "pass" -AsPlainText -Force

$cred = New-Object System.Management.Automation.PSCredential $user, $pass
$mailParam = @{
    To = $to.Split(';')
    From = "IT Alerts <[email protected]>"
    Subject = "test"
    Body = "test"
    SmtpServer = "smtp.gmail.com"
    Port = 587
    Credential = $cred
}

Send-MailMessage @mailParam -UseSsl
1
Zunair

um eine .NET/C # -Powershell-eMail zu senden, verwenden Sie eine solche Struktur:

um bestes Verhalten zu erreichen, erstellen Sie eine Klasse mit einer Methode wie dieser

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

Wobei diese Instanz in einer Funktion aufgerufen wird:

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

Vergessen Sie nicht, ein String-Array für die Empfänger zu verwenden. Dies kann folgendermaßen aussehen:

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

body_msg

diese Nachricht kann der Methode selbst als Parameter übergeben werden, HTML-Codierung aktiviert !!

empfänger

vergessen Sie nicht, ein String-Array für mehrere Empfänger zu verwenden, ansonsten wird nur die letzte Adresse im String verwendet !!!

der Aufruf der Funktion kann folgendermaßen aussehen:

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

Daumen hoch

0
Ricardo Fercher