Благодаря запросу на форуме течнета подновил скрипт добавив поддержку SSL и возможность указания учетных данных. Спасибо .Net, это заняло лишь несколько строчек 🙂
Send-SmtpMail.ps1
param ( $Server = $SmtpHostPreference, # SMTP Сервер $From = $SmtpFromPreference, # Адрес отправителя [string[]]$To, # Получатели $Body = "", # Тело сообщения $Subject = "", # Тема сообщения [System.IO.FileInfo[]]$Attachment=@(), # Вложения [switch]$SSL, [System.Management.Automation.PSCredential]$Credentials=$null ) Write-Verbose "Создаем объекты SmtpClient и MailMessage" $SmtpClient = New-Object System.Net.Mail.SmtpClient $Message = New-Object System.Net.Mail.MailMessage Write-Verbose "Устанавливаем свойства этих объектов" $SmtpClient.EnableSsl = $SSL if($Credentials){$SmtpClient.Credentials = $Credentials.GetNetworkCredential()} $SmtpClient.Host = $Server $Message.Body = $Body $Message.Subject = $Subject $Message.From = $From Write-Verbose "Создаем и добавляем вложения" $Attachment | ForEach-Object { $a = New-Object System.Net.Mail.Attachment($_.fullname) $Message.Attachments.Add($a) } Write-Verbose "Добавляем получателей" $To | ForEach-Object {$Message.To.Add($_)} Write-Verbose "Отправляем сообщение" $smtpclient.Send($Message) Write-Verbose "Удаляем объекты" $Message.Dispose()
Теперь работает даже с GMail 😉
PS> $cred = Get-Credential cmdlet Get-Credential at command pipeline position 1 Supply values for the following parameters: Credential
PS> .\send-smtpmail.ps1 -server smtp.gmail.com ` -from $gmailAddress -to $DestinationAddress ` -body "Тест прошел успешно" -subject "Тест" ` -ssl -credentials $cred
UPD: пофиксил скрипт, а то лежала версия 1 😦
23.5.2008 в 13:01
очень удобно, спасибо!
21.7.2008 в 12:11
[…] на форуме был поднят вопрос об использовании Send-SmtpMail.ps1 из скрипта который запускается в шедулере. Причем на […]
6.11.2008 в 15:55
Добрый день!
Спасибо за скрипт, пользую его активно, но не могу приаттачить файл. Когда приаттачиваю, файл просто тупо открывается(например, если он текстовый, то в ворде) и не пересылается, при этом ps сообщает:»Командлет New-Object в конвейере команд в позиции 1. Укажите значения для следующих параметров: TypeName:» и ждет ввода с клавиатуры. Делаю так:
c:\bat\send-smtpmail.ps1 -to vova@local `
-server smtp -from vova1@local -subject теct `
-body «tect» -attacment (c:\bat\test.txt).
15.11.2008 в 8:42
2 Владимир: Так как имя файла у вас в круглых скобках, PS пытается выполнить его в первую очередь, вот он и открывается. Надо либо просто его без скобок (в кавычках если имя с пробелами), либо использовать например Get-Item:
-Attachment (gi c:\bat\test.txt)
25.11.2008 в 10:57
[…] Скрипт Send-SmtpMail.ps1 для отправки почты. Брать тут. […]
26.1.2009 в 10:42
Добрый день!
У меня почему-то при отправке через Гугл при включенном SSL пишет:
«Исключение при вызове «Send» с «1» аргументами: «Сервер не поддерживает защищенные соединения».
26.1.2009 в 11:06
2 Александр: Только что поддерживал 🙂 Так что скорее всего что-то не так с входными параметрами, или с промежуточным шлюзом.
19.3.2009 в 17:37
при отправке почты тело письма содержит должно содержать многострочный форматированный текст. получаю письмо все в одной строке. Помогите исправить.
23.3.2009 в 10:13
Здравствуйте,
Спасибо за полезный скрипт, но возникает вопрос,
Возвращает ошибку аутентификации
5.5.1 Authentication Required
в том случае, когда пользователь Gmail существует в таком виде:
почта@мой_домен.ru
(такая запись необходима, когда прикручиваешь свой домен к Гугл Аппс и потом обращаешься к почте с клиента)
с «обычным» джимейлом всё ок
Что делать?
28.5.2009 в 11:42
[…] неоправданным). В эту же папку кладём сценарий Send-SmtpMail.ps1 для отправки сообщений на […]
28.8.2009 в 14:59
[…] Вася дает ссылку на свой блог. Забираем его скрипт. Сохраняем в папке C:Program FilesMicrosoftExchangeScripts под именем […]