Send-SmtpMail.ps1 — поддержка аутентификации и SSL

Благодаря запросу на форуме течнета подновил скрипт добавив поддержку 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 😦

комментариев 11 to “Send-SmtpMail.ps1 — поддержка аутентификации и SSL”

  1. micronux Says:

    очень удобно, спасибо!

  2. Отправка почты из скрипта « PowerShell и другие скрипты Says:

    […] на форуме был поднят вопрос об использовании Send-SmtpMail.ps1 из скрипта который запускается в шедулере. Причем на […]

  3. Владимир Says:

    Добрый день!
    Спасибо за скрипт, пользую его активно, но не могу приаттачить файл. Когда приаттачиваю, файл просто тупо открывается(например, если он текстовый, то в ворде) и не пересылается, при этом 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).

  4. Xaegr Says:

    2 Владимир: Так как имя файла у вас в круглых скобках, PS пытается выполнить его в первую очередь, вот он и открывается. Надо либо просто его без скобок (в кавычках если имя с пробелами), либо использовать например Get-Item:
    -Attachment (gi c:\bat\test.txt)

  5. ReportIP.ps1 « PowerShell и другие скрипты Says:

    […] Скрипт Send-SmtpMail.ps1 для отправки почты. Брать тут. […]

  6. Александр Says:

    Добрый день!

    У меня почему-то при отправке через Гугл при включенном SSL пишет:

    «Исключение при вызове «Send» с «1» аргументами: «Сервер не поддерживает защищенные соединения».

  7. Xaegr Says:

    2 Александр: Только что поддерживал 🙂 Так что скорее всего что-то не так с входными параметрами, или с промежуточным шлюзом.

  8. Alexander Says:

    при отправке почты тело письма содержит должно содержать многострочный форматированный текст. получаю письмо все в одной строке. Помогите исправить.

  9. Алексей Says:

    Здравствуйте,
    Спасибо за полезный скрипт, но возникает вопрос,
    Возвращает ошибку аутентификации
    5.5.1 Authentication Required
    в том случае, когда пользователь Gmail существует в таком виде:
    почта@мой_домен.ru
    (такая запись необходима, когда прикручиваешь свой домен к Гугл Аппс и потом обращаешься к почте с клиента)
    с «обычным» джимейлом всё ок
    Что делать?

  10. Улучшенные сообщения о сканировании портов от ISA Server 2004-2006 « PowerShell и другие скрипты Says:

    […] неоправданным). В эту же папку кладём сценарий Send-SmtpMail.ps1 для отправки сообщений на […]

  11. Отчет об активности пользователей Exchange. « IT-Infrastructure Internals Says:

    […] Вася дает ссылку на свой блог. Забираем его скрипт. Сохраняем в папке C:Program FilesMicrosoftExchangeScripts под именем […]


Обсуждение закрыто.