суббота, 27 августа 2011 г.

Отправка почтовых сообщений из скрипта

http://xaegr.wordpress.com/2008/01/24/send-smtpmailps1/ 

Send-SmtpMail.ps1

Очень часто возникает необходимость отправить почтовое сообщение из скрипта, например отчет о выполнении, или какие-нибудь логи.
В комплекте PowerShell Community Extensions есть превосходный командлет Send-SmtpMail, но что делать если по каким то  причинам установка сторонних оснасток является проблемой?
 Ну или просто хочется сделать скрипт для которого нужен только сам PowerShell? А оказывается всё не так уж сложно. Ниже – скрипт который является простеньким аналогом вышеупомянутого командлета. Конечно это не полный клон по функционалу, но на большинство задач хватит, да и расширить не проблема.
Send-SmtpMail.ps1
param ( $Server = $SmtpHostPreference, # SMTP Сервер $From = $SmtpFromPreference, # Адрес отправителя [string[]]$To, # Получатели $Body = "", # Тело сообщения $Subject = "", # Тема сообщения [System.IO.FileInfo[]]$Attachment=@() # Вложения ) Write-Verbose "Создаем объекты SmtpClient и MailMessage" $SmtpClient = New-Object System.Net.Mail.SmtpClient $Message = New-Object System.Net.Mail.MailMessage Write-Verbose "Устанавливаем свойства этих объектов" $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()
В скрипте я использовал командлет Write-Verbose, он выполняет две роли: Во-первых если указать ключ -Verbose при запуске скрипта, то эти сообщения будут выведены на экран. Ну и во-вторых – комментарии писать уже не нужно :)
Применять скрипт можно например так:
.\Send-SmtpMail.ps1 -to ктото@гдето.ru -server pochtovik -from дядя@гдето.ru -subject test -verbose
Или так:
$SmtpHostPreference = "pochtovik.domain.local" $SmtpFromPreference = "дядя@гдето.ru" .\Send-SmtpMail.ps1 -to ктото@гдето.ru -subject test -body "Hello there!" -attachment (dir c:\files\*.txt)
Причем $SmtpHostPreference и $SmtpFromPreference можно задать в профиле, и тогда не придется их указывать при каждом вызове скрипта.
PS: Для работы скрипта, должна быть разрешена анонимная отправка сообщений по SMTP. Хотя можно прикрутить и аутентификацию.

Комментариев нет:

Отправить комментарий