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
Ответы
Ответ 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