С помощью стандартной утилиты telnet вы можете подключится к удаленному SMTP серверу и отправить тестовое письмо . Как правило, это самый простой и быстрый способ проверки удаленного SMTP сервера, не требующий установки полноценного SMTP клиента. Но в большинстве случаев SMTP сервера требуют аутентификации пользователя, а отправка без аутентификации возможно только на анонимных SMTP серверах (SMTP relay).
В этом примере мы покажем, как выполнить аутентификацию на SMTP сервере и отправить письмо из командной строки telnet. Рассмотрим вариант с обычным SMTP сервером, так и с SMTP сервером, который принимает подключения только по защищенному SST/TLS подключению.
Для аутентификации на SMTP сервере через telnet в его настройках должна быть разрешена Basic Authentication . Basic Authentication обычно включена по-умолчанию на серверах Exchange в корпоративной сети. Такой тип аутентификации предполагает отправку имени и пароля пользователя по сети в закодированном виде по алгоритму base64 .
В Exchange Server вы можете включить/отключить базовую аутентификацию в настройках принимающего коннектора.
Можно включить базовую аутентификацию из консоли PowerShell (нужно установить EMS на компьютер или подключиться к Exchange Server удаленно ):
Get-ReceiveConnector "ConnectorName" | Set-ReceiveConnector -AuthMechanism Tls, Integrated, BasicAuth, ExchangeServer
Если вы не контролируете каналы связи до 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] "))
Или модулем MIME::Base64 в Perl:
perl -MMIME::Base64 -e 'print encode_base64("username");'
Либо воспользуйтесь любым онлайн сервисом, например, https://www.base64encode.org .
Имя пользователя: testuser@ contoso. com , в кодировке Base64 получилось: dGVzdHVzZXJAY29udG9zby5jb20=
Пароль: $ up3 RsTr) ng — в Base64 JHVwM1 JzVHIpbmc=
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]_x000D_250-SIZE 36700160_x000D_250-PIPELINING_x000D_250-DSN_x000D_250-ENHANCEDSTATUSCODES_x000D_250-STARTTLS_x000D_ 250-AUTH LOGIN_x000D_250-8BITMIME_x000D_250-BINARYMIME_x000D_250 CHUNKING
Например, такой ответ 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] 00$up3RsTr)ng")'
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(" username password"))
Сообщите SMTP серверу, что вы хотите аутентифицироваться с помощью метода LOGIN:
AUTH LOGIN
Сервер должен ответить строкой Username в форматер base64:
334 VXNlcm5hbWU6
AUTH PLAIN XDAwMHRlc3R1c2VyQGNvbnRvc28uY29tXDAwMCR1cDNSc1RyKW5n
Теперь вставьте в консоль закодированное имя пользователя в формате Base64, которое вы получили ранее:
dGVzdHVzZXJAY29udG9zby5jb20=
Сервер должен ответить кодом 334 и строкой Password в base64:
334 UGFzc3dvcmQ6.
Теперь можно вставить пароль в формате Base64:
JHVwM1JzVHIpbmc=
Если имя и пароль пользователя верны, сервер ответит.
235 2.7.0 Authentication successful
Если нет:
535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6
mail from: [email protected]
250 2.1.0 Sender OK
rcpt to: [email protected]
250 2.1.5 Recipient OK
data
354 Start mail input; end with .
from: TestUserovich < [email protected] >
to: TheAdmin < [email protected] >
Subject: Test BASE SMTP Authenticated via Telnet
This is test
.
250 2.6.0 < [email protected] > [InternalId=6384384] Queued mail for delivery
Письмо было поставлено в исходящую очередь на отправку.
221 2.0.0 Closing connection.
Connection closed by foreign host.
Через некоторое время проверьте, доставлено ли это письмо в ящик получателя.
Большинство SMTP провайдеров не разрешают подключение к серверу в открытом виде. Разрешаются только SMTP подключения, зашифрованные с помощью TLS. Только после этого можно выполнить аутентификацию с помощью методов LOGIN и PLAIN. Telnet не поддерживает SSL или TLS, поэтому для подключению к SMTP серверу по TLS нужно использовать утилиту OpenSSL .
Рассмотрим, как подключиться к SMTP серверу через TLS и выполнить аутентификацию с помощью OpenSSL.
Скачайте и установите OpenSSL в вашей ОС:
sudo apt-get install openssl – в Ubuntu/Debian
sudo yum install openssl – в CentOS/RedHat
Чтобы подключится к SMTP серверу из командной строки с предварительной инициализацией шифрования через SSL/TLS, используйте такую команду:
openssl.exe s_client -starttls smtp -connect smtp.remontka.com:25
После установки защищенного SSL соединения с SMTP сервером выполните команду EHLO
.
SMTP сервер вернет:
EHLO there_x000D_250- smtp.remontka.com_x000D_250-PIPELINING_x000D_250-SIZE 52428800_x000D_250-ETRN_x000D_250-AUTH PLAIN LOGIN_x000D_250-ENHANCEDSTATUSCODES_x000D_250-8BITMIME_x000D_250 DSN
Теперь вы можете выполнить аутентификацию AUTH LOGIN / AUTH PLAIN и отправку письма как описано выше.
В конце октября 2020 Microsoft запретила использовать basic authentication для подключения к почтовым ящикам. SMTP Auth к серверам в Office 365 (Microsoft 365/ Exchange Online) все еще поддерживается, но считается небезопасной. Microsoft отключила SMTP AUTH для новых тенантов. Это означает, что вы не сможете подключиться к SMTP хостам в Office 365 из командной строки telnet или openssl.
Для отправки письма через SMTP сервера в Office 365 нужно использовать PowerShell командлет Send-MailMessage .
$MailMessage = @{
To = $emailto
From = $emailfrom
Subject = "Test email O365"
Body = "Some text"
Smtpserver = $smtpserver
#ErrorAction = "SilentlyContinue"
Port="587"
}
Send-MailMessage @MailMessage -UseSsl -Credential $cred
Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…