Отправка письма в PowerShell отличается от той же процедуры в VBScript:
Send-MailMessage [-To] <string[]> [-Subject] <string> -From <string> [[-Body] <string>] [[-SmtpServer] <string>] [-Attachments <string[]>] [-Bcc <string[]>] [-BodyAsHtml] [-Cc <string[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]
Напомню, что в VBScript блок команд для отправки сообщения через SMTP сервер выглядел таким образом:
set objEmail = CreateObject("CDO.Message") objEmail.From = sFrom objEmail.To = sTo objEmail.Subject = sSubject objEmail.Textbody = sTextBody objEmail.AddAttachment sPathToAttachment objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _ sExchangeServer objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 objEmail.Configuration.Fields.Update objEmail.Send
Хотя команда в PowerShell дотаточно проста в использовании, я столкнулся с небольшими неприятностями, а точнее отличиями от VBScript:
1. Чтобы указать кодировку тела сообщения, нужно создавать специальную переменную типа System.Text.Encoding, напрямую в строке отправки сообщения этого сделать нельзя.
2. Чтобы указать несколько получателей, нужно создавать массив адресов.
Приведу пример на PowerShell, чтобы объяснить, как отправить письмо с помощью скрипта.
#Тема сообщения $MessageSubject = "Custom report" #Текст сообщения в формате HTML (можно использовать и простой текст) $MessageBody = $Null $MessageBody += "<head>" $MessageBody += "<meta http-equiv=""Content-Type"" content=""UTF-8"" />" $MessageBody += "</head>" $MessageBody += "<body style=""font-family: 'Trebuchet MS';"">" $MessageBody += "<h1>Report header</h1>" $MessageBody += "<div>ReportText</div>" $MessageBody += "</body>" #Указание кодировки письма (может быть ASCII, UTF8, UTF7, UTF32, Unicode, BigEndianUnicode, Default и OEM) $Encoding = [System.Text.Encoding]::UTF8 #Указание получателей письма [string[]]$TO = "user1@domain.com", "user2@domain.com" #Указание получателей копии письма [string[]]$CC = "user3@domain.com" #Отправка письма Send-MailMessage -SmtpServer "smtp.server.com" -Encoding $Encoding -From "reports.server@domain.com" -To $TO -CC $CC -Subject $MessageSubject -BodyAsHtml $MessageBody