Подтвердить что ты не робот

Powershell send-mailmessage - электронная почта для нескольких получателей

У меня есть это powershell script для отправки писем с вложениями, но когда я добавляю несколько получателей, только первое получает сообщение. Я прочитал документацию и до сих пор не могу понять. Спасибо вам

$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
4b9b3361

Ответ 1

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

является типом string, вам нужно перейти к типу send-mailmessage a string[] (массив):

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

Я думаю, что не приведение в строку [] выполняет задание для правил принуждения powershell:

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

является object[], но может выполнять ту же работу.

Ответ 2

Просто создание массива Powershell выполнит трюк

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

Такой же подход можно использовать для вложений

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

Ответ 3

Сначала вы должны преобразовать строку в массив строк, например:

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

Затем используйте Send-MailMessage следующим образом:

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

Ответ 4

Чтобы определить массив строк, удобнее использовать $ 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

Ответ 5

Это право, каждый адрес должен быть указан. Если у вас есть несколько адресов, перечисленных в командной строке, Send-MailMessage понравится, если вы укажете как дружественные человеку, так и адреса электронной почты.

Ответ 6

для отправки e-mail PowerShell.NET/С# используйте такую ​​структуру:

для лучшего поведения создайте класс с таким методом

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

В результате этот экземпляр вызывается в функции типа:

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

Никогда не забудьте использовать строковый массив для получателей, который может выглядеть следующим образом:

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

body_msg

это сообщение может быть перераспределено как параметр самому методу, включен HTML-код!!

Получатели

никогда не забудьте использовать строковый массив в случае нескольких получателей, иначе будет использоваться только последний адрес в строке.

вызов функции может выглядеть следующим образом:

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

ThumbUp

Ответ 7

вот полное (gmail) и простое решение... просто используйте обычное; разделитель.. лучше всего для передачи в качестве параметров.

$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