Отправка письма из Telnet с аутентификацией через обычный SMTP и защищенный SMTP TLS

Отправка письма из Telnet с аутентификацией через обычный SMTP и защищенный SMTP TLS

С помощью стандартной утилиты telnet вы можете подключится к удаленному SMTP серверу и отправить тестовое письмо. Как правило, это самый простой и быстрый способ проверки удаленного SMTP сервера, не требующий установки полноценного SMTP клиента. Но в большинстве случаев SMTP сервера требуют аутентификации пользователя, а отправка без аутентификации возможно только на анонимных SMTP серверах (SMTP relay).

В этом примере мы покажем, как выполнить аутентификацию на SMTP сервере и отправить письмо из командной строки telnet. Рассмотрим вариант с обычным SMTP сервером, так и с SMTP сервером, который принимает подключения только по защищенному SST/TLS подключению.

Аутентификация на SMTP сервере из командной строки telnet

Для аутентификации на SMTP сервере через telnet в его настройках должна быть разрешена Basic Authentication. Basic Authentication обычно включена по-умолчанию на серверах Exchange в корпоративной сети. Такой тип аутентификации предполагает отправку имени и пароля пользователя по сети в закодированном виде по алгоритму base64.

В Exchange Server вы можете включить/отключить базовую аутентификацию в настройках принимающего коннектора.

Exchange Server - включена Basic-Authentication

Можно включить базовую аутентификацию из консоли PowerShell (нужно установить EMS на компьютер или подключиться к Exchange Server удаленно):

Get-ReceiveConnector "ConnectorName" | Set-ReceiveConnector -AuthMechanism Tls, Integrated, BasicAuth, ExchangeServer

Примечание. Обращаем ваше внимание, что злоумышленник при доступе к каналу связи может легко перехватить и расшифровать учетные данные пользователя закодированные с помощью Base64. Поэтому этот способ аутентификации рекомендуется использовать исключительно в частных корпоративных сетях.

Если вы не контролируете каналы связи до Exchange, желательно разрешать BasicAuth только после установки, защищенной TLS сессии. Включите опцию Offer basic authentication only after starting TLS в свойствах коннектора в EMC, или воспользуйтесь PowerShell:

Get-ReceiveConnector "ConnectorName" | Set-ReceiveConnector -AuthMechanism 'Tls, BasicAuth, BasicAuthRequireTLS'

Особенности отправки SMTP письма через TLS/SSL описаны в последнем разделе статьи.

Для аутентификации на SMTP сервере через AUTH LOGIN, нужно преобразовать в формат Base64 имя и пароль пользователя, из-под которого будет отправляться письмо. Для преобразования данных в Base64 можно воспользоваться функцией PowerShell:

[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("[email protected]"))

powershell конвертировать текст в Base64

Или модулем MIME::Base64 в Perl:

perl -MMIME::Base64 -e 'print encode_base64("username");' 

Либо воспользуйтесь любым онлайн сервисом, например, https://www.base64encode.org.

Имя пользователя: testuser@contoso.com, в кодировке Base64 получилось: dGVzdHVzZXJAY29udG9zby5jb20=

Пароль: $up3RsTr)ng — в Base64 JHVwM1JzVHIpbmc=

конвертация имени и пароля в формат base64Откройте командную строку и с помощью Telnet подключитесь на 25 (SMTP) порт почтового сервера (вводимые команды я буду выделять синим цветом):

telnet mail.contoso.com 25

Если это хост с Exchange Server, он вернет что-то вроде;

220 mail.contoso.com Microsoft ESMTP MAIL Service ready at Thu, 10 Aug 2015 14:25:30 +0300

Сначала нужно представиться серверу:

ehlo sender.contoso.com

Сервер вернет список поддерживаемых типов аутентификаций и возможностей. Как вы видите базовая аутентификации (AUTH LOGIN) в списке присутствует.

250-mail.contoso.com Hello [192.168.100.15]
250-SIZE 36700160
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
 250-AUTH LOGIN
250-8BITMIME
250-BINARYMIME
250 CHUNKING
Также на SMTP серверах могут использоваться следующие протоколы аутентификации: PLAIN, GSSAPI, DIGEST-MD5, MD5, CRAM-MD5, OAUTH10A, OAUTHBEARER.

Например, такой ответ SMTP сервера говорит о том, что поддерживаются 3 протокола аутентификации.

250 AUTH GSSAPI DIGEST-MD5 PLAIN

PLAIN и LOGIN используют кодировку имени и пароля с помощью BASE64. Отличие между ними в том, что для метода PLAIN логин и пароль передаются одной строкой, а при использовании LOGIN сначала отправляется логин, потом пароль.

Если ваш сервер SMTP поддерживает PLAIN метод аутентификации, можно закодировать имя и пароля с помощью perl функции или PowerShell:

perl -MMIME::Base64 -e 'print encode_base64("[email protected]