Супер-акция от Inferno Solutions! Получи 30$ на халяву и забудь об оплате VPS на все лето!
В данной серии статей мы очень подробно рассмотрим различные способы и методы отправки сообщений электронной почты с помощью скриптов PowerShell.
Для выполнения данного действия существуют разные способы, зависящие от установленной у вас версии PowerShell. Проверить установленную версию вы можете введя $host в окне PowerShell.
В случае если у вас PowerShell 1.0 вы увидите следующее сообщение :
PS C:\> $host Name : ConsoleHost Version : 1.0.0.0
А при установленном PowerShell 2.0 вывод будет следующий:
PS C:\> $host Name : ConsoleHost Version : 2.0
Отправка SMTP сообщений в PowerShell 1.0
Для PowerShell 1.0 отправка будет выглядеть следующим образом:
PS C:\> $smtp = New-Object Net.Mail.SmtpClient("ho-ex2010-caht1.exchangeserverpro.net") PS C:\> $smtp.Send("reports@exchangeserverpro.net","administrator@exchangeserverpro.net","Test Email","This is a test")
Для лучшего понимания давайте более детально остановимся на выполняемых действиях.
- Создается новый экземпляр объекта .NET класса SmtpClient, подключается к SMTP серверу SMTP ho-ex2010-caht1 (Hub Transport)
- Используя метод Send объекта определяем следующие значения:
- Адрес From – “reports@exchangeserverpro.net”
- Адрес To – “administrator@exchangeserverpro.net
- Тема – “Test Email”
- Тело письма – “This is a test”
Данная конструкция работает отлично, однако это несколько сложно набирать все это постоянно. Поэтому создадим небольшой скрипт.
# #.SYNOPSIS #Sends SMTP email via the Hub Transport server # #.EXAMPLE #.\Send-Email.ps1 -To "administrator@exchangeserverpro.net" -Subject "Test email" -Body "This is a test" # param( [string]$to, [string]$subject, [string]$body ) $smtpServer = "ho-ex2010-caht1.exchangeserverpro.net" $smtpFrom = "reports@exchangeserverpro.net" $smtpTo = $to $messageSubject = $subject $messageBody = $body $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $smtp.Send($smtpFrom,$smtpTo,$messagesubject,$messagebody)
Сохраним его под именем Send-Email.ps1 и запустим из окна PowerShell.
PS C:\Scripts> .\Send-Email.ps1 -To "administrator@exchangeserverpro.net" -Subject "Test email" -Body "This is a test"
Теперь все несколько проще. На этом пока остановимся и перейдем к Powershell 2.0.
Отправка SMTP сообщений в PowerShell 2.0
PowerShell 2.0 делает жизнь скриптописателей гораздо более простой благодаря новому командлету Send-MailMessage. Для отправки письма из примера выше воспользуемся следующей командой:
PS C:\> Send-MailMessage -From "reports@exchangeserverpro.net" -To "administrator@exchangeserverpro.net" -Subject "Test email" -Body "This is a test email"
Первое, на что вы можете обратить внимание, это отсутствие явного указания SMTP сервера. Командлет Send-MailMessage имеет параметр –SmtpServer, однако если он не указан то будет использоваться переменная окружения $PSEmailServer. Задать её можно следующей командой:
PS C:\> $PSEmailServer = "ho-ex2010-caht1.exchangeserverpro.net"
Другим интересным моментом является то, что Send-MailMessage использует авторизацию SMTP подключения. По умолчанию используются учетные данные пользователя, выполняющего команду. Поэтому вам необходимо убедиться что у вас выполняется одно из двух условий:
- Для пользователя, выполняющего отправку она разрешена на SMTP сервере.
- Принимаются анонимные SMTP подключения от IP адреса отправляющего хоста.
На этом базовая часть закончена, в следующей статье мы рассмотрим добавление тела письма для отправки через скрипт.