Отправка электронной почты с помощью Office 365 Direct Send и PowerShell

Знаете ли вы, что можно использовать Office 365 для отправки электронной почты с помощью PowerShell? В этой статье вы узнаете, как отправить электронное письмо с помощью Office 365 Direct Send и командлета Send-MailMessage PowerShell.

Если вы хотите получить более подробную информацию о том, как отправлять электронную почту с помощью PowerShell, ознакомьтесь с этим подробным руководством по Send-MailMessage.

Direct Send Office 365 против отправки клиентского SMTP

Прежде чем мы слишком глубоко погрузимся в PowerShell, знайте, что существует не только один способ отправки электронной почты через Office 365 с использованием PowerShell. В Office 365 есть два поддерживаемых способа отправки электронной почты. Это Прямая отправка и Отправка клиентом SMTP или Аутентифицированная отправка SMTP.

Аутентифицированная отправка SMTP

Аутентифицированная отправка SMTP – самый простой в настройке вариант. Вы бы выбрали этот вариант, если планируете отправлять электронные письма с устройства или приложения получателям внутри и за пределами вашей организации. Для этого в Office 365 не требуется дополнительных действий.

Этот вариант позволяет использовать любой адрес отправителя. Однако адрес должен быть из одного из ваших проверенных доменов, принятых к использованию.

Для использования Аутентифицированной отправки SMTP вы должны:

  • Иметь почтовый ящик пользователя Office 365 (лицензированный). Этот адрес электронной почты будет отображаться как отправитель сообщения.
  • PowerShell (или другой клиент) должен иметь возможность разрешить и достичь smtp.office365.com.
  • TCP-порт 587 или 25 должен быть открыт в Office 365 с клиента.

Прямая отправка

Немного увеличивая сложность, есть опция Прямая отправка. Как и SMTP-аутентифицированная отправка, Прямая отправка позволяет использовать любой адрес отправителя. Кроме того, адрес from должен быть одним из ваших подтвержденных доменов.

Основное отличие между Прямой отправкой и SMTP-аутентифицированной отправкой заключается в том, что не разрешаются внешние получатели. Если вам нужно отправить сообщение получателям вне вашей организации, Прямая отправка не подойдет.

Прямая отправка имеет несколько требований/рекомендаций:

  • Адрес отправителя не обязательно должен быть действительным ящиком. Но он необходим, если вы планируете получать NDR или ответы, используя этот адрес.
  • TCP-порт 25 открыт от вашего клиента к Office 365.
  • Устройство должно быть способно разрешить и достичь вашего URL конечной точки MX (например, yourdomain-com.mail.protection.outlook.com)
  • A static public IP address. This is to update your SPF record and avoid your messages getting flagged as spam (optional but recommended)

Если вы не знаете, как найти URL конечной точки MX, вот быстрый учебник:

  1. Войдите в Портал администратора Office 365.
  2. Нажмите Настройка (1), выберите Домены (2), щелкните Имя домена (3), скопируйте MX Адрес точки для адресации или значение (4).
Finding Office 365 MX Endpoint URL

SMTP-аутентифицированная отправка

Первый метод отправки электронной почты – это отправка через клиент SMTP или аутентифицированную отправку SMTP. Используя командлет Send-MailMessage в PowerShell, мы можем указать все параметры, необходимые для отправки почты через Office 365.

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

Сначала вам нужно определить объект PowerShell PScredential, затем предоставить все параметры, которые нужны для Send-MailMessage.

# Получение учетных данных
$credential = Get-Credential

## Определение параметров Send-MailMessage
$mailParams = @{
    SmtpServer                 = 'smtp.office365.com'
    Port                       = '587' # или '25', если не используется TLS
    UseSSL                     = $true ## или не используется, если используется не-TLS
    Credential                 = $credential
    From                       = '[email protected]'
    To                         = '[email protected]', '[email protected]'
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = 'This is a test email using SMTP Client Submission'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## Отправка сообщения
Send-MailMessage @mailParams

При запуске указанного выше кода вы должны получить электронное письмо, полученное внутренним получателем (вашдомен.com) и внешним доменом (невашдомен.com).

Internal Email
External email

Прямая отправка (требуется TLS)

Аналогично SMTP Authenticated Submission, вы можете использовать практически те же параметры для Send-MailMessage. Однако на этот раз получателями To будут только внутренние получатели.

Также обратите внимание, что учетные данные PSCredential не были необходимы.

## Сбор параметров
$mailParams = @{
    SmtpServer                 = '<tenant>.mail.protection.outlook.com'
    Port                       = '25'
    UseSSL                     = $true   
    From                       = '[email protected]'
    To                         = '[email protected]'
    Subject                    = "Direct Send $(Get-Date -Format g)"
    Body                       = 'This is a test email using Direct Send'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## Отправка электронной почты
Send-MailMessage @mailParams
Direct Send email

Краткое изложение

Вы видите, что Office 365 предоставляет два различных варианта отправки электронной почты. В этой статье мы использовали PowerShell в качестве примера для демонстрации обоих вариантов. Но вам не обязательно использовать PowerShell. Пока ваше приложение или язык программирования поддерживает аутентификацию TLS, вы можете использовать любой метод, который вам нравится.

Дополнительное чтение

Source:
https://adamtheautomator.com/office-365-direct-send/