Для этой командлеты PowerShell дня мы рассмотрим командлет PowerShell Send-MailMessage. Этот командлет PowerShell служит одной и только одной цели – отправлять электронные письма различными способами.
Поскольку командлет Send-MailMessage может отправлять электронные сообщения разными способами, давайте сразу перейдем к рассмотрению всех общих примеров, с которыми вы можете столкнуться. В этой статье мы рассмотрим множество примеров, начиная с самых простых и заканчивая ситуациями, которые я никому не желаю!
Этот пост будет отличным ресурсом для закладки на случай, если вам когда-нибудь понадобится отправить электронное письмо с помощью PowerShell и вы забудете синтаксис.
SMTP-сервер
Все электронные письма должны проходить через SMTP-сервер с указанием сервера и порта. Чтобы указать SMTP-сервер для использования, используйте параметр с именем SMTPServer
, который позволяет указать SMTP-сервер для установки соединения и пересылки почты. Однако это необязательно.
Если вы не указываете значение параметра SMTPServer
, будет использовано значение, хранящееся в переменной предпочтений $PSEmailServer
. Вы можете присвоить значение этой переменной так же, как и любой другой переменной.
Однако эта переменная не сохраняется между сеансами PowerShell. Это означает, что вы должны определить её каждый раз, когда открывается новый сеанс PowerShell. По этой причине я рекомендую либо использовать её, определив её выше вашей ссылки Send-MailMessage
, либо не определять её вообще. Вместо этого я бы лично предоставил значение параметра SMTPServer
. Таким образом, вам не придется управлять внешней переменной, которая может измениться.
Port
По умолчанию значение, которое команда будет пытаться использовать для отправки электронной почты через сервер SMTP, – это порт 25. Это обычный, незашифрованный SMTP. Однако в настоящее время более распространено отправлять зашифрованные электронные письма с использованием SSL/TLS (эти сценарии мы рассмотрим позже).
Если вам нужно изменить порт с 25, вы можете использовать параметр Port
.
Получатели и отправители
Чтобы отправить электронное письмо различным получателям через методы, такие как To, Cc и Bcc, у команды есть различные параметры для этого.
Параметры To, Cc и Bcc в команде Send-MailMessage
У команды есть три параметра, каждый поддерживающий несколько адресатов, разделенных запятой, называемые To
, Cc
и Bcc
.
Вы можете указать одиночные адреса, как показано ниже.
Или вы можете указать несколько получателей для каждого значения параметра.
Параметр From
При отправке электронной почты вы также можете указать параметр From
, который установит заголовок ответа в электронной почте. Этот параметр позволяет указать только один адрес. Если получатель решит ответить на электронное письмо, ответ будет отправлен на этот адрес электронной почты.
По умолчанию при использовании адреса электронной почты в поле FROM получателя просто отображается сам адрес электронной почты. Однако, если вы хотите указать имя или какой-либо другой вид метки, например, Почтовый ящик служебной учетной записи, вы также можете указать имя и адрес электронной почты:
Обратите внимание, что использован параметр
Subject
. Этот параметр всегда обязателен. Вы увидите, что этот параметр используется во всех примерах.
Текст письма
Параметр Body
позволяет указать содержимое электронного письма. Просто можно указать любой текст, который вы хотите отправить, и командлет отправит его в виде обычного текста.
Отправка электронных писем с HTML-текстом
Вы также можете отправить тело электронного письма в виде HTML вместо обычного текста. Для этого используйте тот же параметр Body
, что и при отправке обычного текста, но для строки используйте HTML и параметр переключения BodyAsHtml
.
Обратите внимание на пример выше, я заключил строку тела в
@'
и'@
. Это называется строка здесь. Это позволяет вам определять длинные строки, обычно встречающиеся в телах электронных писем, которые содержат символы возврата каретки. Строки здесь сохраняют форматирование строк и отличный способ определения тела электронной почты, особенно если оно в формате HTML.
Кодирование
Если в теме или теле вашего электронного письма есть специальные символы, вы можете использовать параметр Encoding
. Этот параметр позволяет кодировать тему и тело электронного письма с помощью указанного типа кодирования перед отправкой.
У вас есть несколько вариантов:
- ASCII (по умолчанию)
- UTF8
- UTF7
- UTF32
- Unicode
- BigEndianUnicode
- Default
- OEM
Вложения
Командлет также может прикреплять один или несколько файлов. Для этого вы можете использовать параметр Attachments
и указать путь к файлам, которые вы хотели бы прикрепить.
Вы также можете указать несколько вложений через коллекцию, разделяя их запятой.
Параметр Attachments
также позволяет передавать файлы через командлеты, такие как Get-Item
и Get-ChildItem
, к командлету Send-MailMessage
.
Безопасная и аутентифицированная электронная почта
По умолчанию cmdlet отправляет электронную почту через незашифрованное SMTP-соединение через порт 25. Однако он также поддерживает отправку зашифрованной почты через SSL/TLS с использованием имени пользователя и пароля.
Если вы пытаетесь переслать электронную почту через SMTP-сервер, требующий аутентификации, команда завершится с сообщением об ошибке, как показано ниже.
Чтобы исправить это, сначала необходимо указать порт (обычно 587 для TLS) и параметр UseSsl
. Это указывает cmdlet’у попытаться подключиться к порту 587 на SMTP-сервере и зашифровать всё сообщение. Обычно (всегда?) также необходимо указать имя пользователя и пароль для аутентификации на SMTP-сервере, используя параметр Credential
.
В приведенном выше примере я получаю объект учетных данных (PSCredential) с помощью cmdlet’а
Get-Credential
. Иногда это вызывает проблему, так как он использует интерактивный режим, что останавливает выполнение скрипта, чтобы запросить имя пользователя и пароль. Чтобы избежать этого, можно создать объект PSCredential на лету.
A common email example is to use Gmail. Using the knowledge you’ve gained above, you can now easily send email through Gmail using the smtp.gmail.com SMTP server as shown below.
Назначение приоритета электронной почты
Хотя это одна из особенностей электронной почты, которую лично я хотел бы увидеть умершей, вы можете назначать уровни приоритета для отправляемых электронных писем с помощью параметра Priority
. Этот приоритет затем интерпретируется по-разному клиентом электронной почты.

Send-mailmessage позволяет назначить электронному письму три разных приоритета.
- Нормальный (по умолчанию)
- Высокий
- Низкий
Но, ради всего святого, не думайте, что все ваши электронные письма имеют высокий приоритет!
Уведомления о доставке
Наконец, вы можете указать уведомления о доставке для электронных писем. Уведомления о доставке, как правило, известны как уведомления о прочтении в некоторых почтовых клиентах. Уведомления о доставке позволяют получать уведомление о том, что письмо получено получателем. Однако получатель все равно должен разрешить это.
У вас есть четыре варианта при запросе уведомлений о доставке.
- Нет (по умолчанию)
- OnSuccess (когда доставка письма прошла успешно)
- OnFailure (уведомить, если доставка не удалась)
- Delay (когда письмо задерживается на SMTP-сервере)
Вы можете указать вариант уведомления о доставке с помощью параметра DeliveryNotificationOptions
.
Вы также можете запросить несколько уведомлений о доставке одновременно, разделяя их запятой.
Вывод
В этой статье вы узнали все о командлете Send-mailmessage и о том, что он может делать. Мы подробно рассмотрели этот командлет, используя все его параметры вместе с примерами. Надеюсь, эта статья может служить вам справочным материалом при использовании командлета Send-mailmessage.
Дополнительное чтение
Обязательно ознакомьтесь с другими связанными статьями!