headermask image

Отправка SMTP сообщений с помощью PowerShell. Часть 1

Супер-акция от 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")

Для лучшего понимания давайте более детально остановимся на выполняемых действиях.

  1. Создается новый экземпляр объекта .NET класса SmtpClient, подключается к SMTP серверу SMTP ho-ex2010-caht1 (Hub Transport)
  2. Используя метод Send объекта определяем следующие значения:
    • Адрес From – “reports@exchangeserverpro.net”
    • Адрес To – “administrator@exchangeserverpro.net
    • Тема – “Test Email”
    • Тело письма – “This is a test”

powershell-send-smtp-email-ps1-01

Данная конструкция работает отлично, однако это несколько сложно набирать все это постоянно.  Поэтому создадим небольшой скрипт.

#
#.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 адреса отправляющего хоста.

На этом базовая часть закончена, в следующей статье мы рассмотрим добавление тела письма для отправки через скрипт.

Print This Post Print This Post
Похожие посты
  • Отправка SMTP сообщений с помощью PowerShell. Часть 3
  • Отправка SMTP сообщений с помощью PowerShell. Часть 4
  • Отправка SMTP сообщений с помощью PowerShell. Часть 2
  • Как узнать установленную версию Powershell
  • Работа в режиме хостинга Exchange 2010 SP1. Часть 4 – получение и отправка почты
  • Удаленное подключение к Exchange 2010 с помощью Powershell…
  • PowerShell Plus for Free
  • Обновляем старые скрипты на их PowerShell аналоги
  • На следующей неделе 2 веб-трансляции Microsoft
  • Настройка уникального имени для SMTP баннера каждого коннектора получения в Exchange Server