Как отправить письмо через telnet
Smtp Telnet — как отправить письмо с помощью smtp Telnet?
Чтобы отправить письмо с помощью smtp Telnet, не обязательно использовать какой-то mail-клиент, или пользоваться веб-интерфейсом. Можно просто воспользоваться smtp Telnet. Опишу как это можно сделать в случае, если SMPT — сервер не требует авторизации.
Для этого нам нужны:
Программа smtp Telnet является встроенной в большинство операционных систем.
Как SMTP — сервер, можно использовать почтовый сервер вашего провайдера.
Дальше за дело. Пишем в консоли:
telnet yourSMTPserver.com 25
Trying xxx.xxx.xxx.xxx …
Connected to yourSMTPserver.com.
Escape character is ‘^]’.
220 yourSMTPserver.com, ESMTP Sendmail 8.14.2/8.14.2
Так мы идем с SMTP — сервером через 25 й порт. А дальше просто вводим команды ( красным — команды, серым — пример ответа сервера):
250 yourSMTPserver.com Hello host [xxx.xxx.xxx.xxx]
, где you@sender.com — адрес вашего ящика, с которого вы отправляете сообщение.
, где your_friend@destination.com – адрес ящика, на который Вы хотите отправить сообщение с помощью smtp telnet.
354 Enter message, ending with «.» On a line by itself
From: you@sender.com
To: your_friend@destination.com
Subject: testsubject
testletter
Все, что вводится после команды DATA — это содержание вашего сообщения. Здесь уже поля From :, To :, и Subject : являются необязательными. Заканчивается сообщение символом точка («.») в отдельной строке.
linux-notes.org
Отправка и получение почты через telnet
Недавно на работе мне задали неплохую задачу, мне пришлось хорошенечко подумать и погуглить чтобы решить ее.
ЗАДАЧА.
Введите EHLO your_domain_or_IP. Некоторые серверы также принимаем HELO вместо EHLO.
Введите от кого будет посылаться письмо (например user_name@your_domain_or_IP):
Напишите сообщение — тип DATA, а затем вашу тему (SUBJECT) и ваще сообщения. Для завершения сообщение необходимо поставить точку на отдельной строке и нажмите клавишу ВВОД (enter):
Чтобы выйти из telnet, выполните quit в вашем терминале:
Для дополнительной безопасности, можно зашифровать соединение по протоколу IMAP. Необходимо чтобы ваш сервер поддерживает SSL или TLS, и что у вас есть доступ к клиентской программы SSL/ TLS, например, OpenSSL, чтобы использовать вместо Telnet.
Обычно, номер порта — 993, для примера в OpenSSL должан выглядеть следующим образом:
Если вы хотели бы видеть открытый ключ сервера, а также некоторую другую информацию шифрования, то запускаем telnet следующим образом:
Рассмотрим конкретный пример:
telnet dbmarble.com imap — подключение к серверу dbmarble.com через telnet используя imap.
a1 LOGIN USER_NAME User_NAME_Password — выполняем конмаду LOGIN с именем пользователя и с паролем.
a2 LIST «» «*» — Смотрим какие папки имеются.
a3 EXAMINE INBOX — Смотрим папку INBOX.
a4 FETCH 1 BODY[] — выполняем команду чтобы посмотреть тело емейла.
a5 LOGOUT — вводим команду для выхода.
Некоторые полезные команды:
LOGIN [username] [password]
LIST [flags] [folder separator] [search term]
STATUS [mailbox] [flags]
SELECT [mailbox]
FETCH [first]:[last] flags
FETCH [mail number] body[header]
FETCH [mail number] body[text]
LOGOUT
Telnet — Команды SMTP (отправка почты с помощью программы Telnet).
Подключаемся с Telnet на почтовый сервер:
Вы должны получить ответ вроде моего:
Если последняя строка состоит из большого количества звезд с 2 или 0, то вы, вероятно, будет использовать Cisco PIX, и ни один из расширенных команд не будет работать.
Затем вам нужно будет объявить, где вы отправляете письмо от. Вы можете использовать стандартный или расширенный SMTP команды, чтобы сделать это. Расширенные команды позволяют вам увидеть, что поддерживается на сервере и разрешить себе авторизацию:
Это должно дать Вам вывод подобно моему:
Расширенный SMTP, используем:
Это должно дать Вам что-то типа этого:
Если «AUTH» авторизация есть в списке вы можете войти на сервер. Это, как правило, позволяют некоторые вещи, которые обычно ограничены для ретрансляции пример. Вам нужно будет использовать ваше имя пользователя и пароль в Base64.
Вы действительно должны использовать ваше полное доменное имя.
Теперь дайте укажем свой адрес электронной почты:
Угловые скобки вокруг имени важны; некоторые серверы не будут принимать имя, если они не существуют.
Вывод должен быть подобный этому:
Теперь указываем адрес получателя:
Опять же, необходимо использовать угловые скобки.
Чтобы начать писать сообщение, нужно ввести следующую команду:
затем дважды нажмите клавишу ВВОД (они необходимы, чтобы соответствовать RFC 882)
Теперь Вы можете продолжить набирать тело письма, для завершения сообщения используйте сингл «.» на отдельной строке.
Почтовый сервер должен ответить:
Для закрытия подключения, используйте:
Почтовый сервер должен ответить что-то вроде:
Получение или чтение почты с сервера.
Пользователь и адрес электронной почты (например user_name@my_domain), для которого вы хотите просмотреть электронную почту:
Затем введите пароль пользователя:
Введите список ваших писем:
Вы увидите список пунктов с таких лейблах, как «1 897» и «2 5136.» Вот пример:
Если вы хотите прочитать сообщение электронной почты, такие как 2 5136, вы можете ввести следующее:
Если вы хотите удалить сообщение, такое как 1 897, то используйте тип DELE 1:
Когда вы закончите проверять свою электронную почту, введите quit.
Теперь возвращаемся к моим баранам, расскажу как я выполнил это все задание. И так….
Решение задачи
Так как у меня на сервере использовалось шифрование, то для подключения нужно использовать следующую команду:
Вы должны получить ответ вроде:
Для первоначального подключения и каждой команды, которые вы вводите, почтовый сервер будет отвечать:
Команды, которые вы можете использовать, являются (введите пользователя):
This must be the first command after the connect. Supply your e-mail userid (not the full e-mail address).
Это должно быть следующей команды после USER. Укажите Ваш адрес электронной почты и пароль.Пароль может быть чувствительны к регистру.
Получите что-то типа:
Где #msgs является количество сообщений в почтовом ящике и #bytes является общий размер используемых всех сообщений. Теперь выведем все сообщения которые имеются.
Ответом на это, Вы получите строки для каждого сообщения с его количеством и размером в байтах.
Пример ответа:
Это извлекает указанное сообщение «MSG #» (и отображает его на экране Telnet). Вы можете просматривать сообщения по количеству строк:
Это необязательная команда POP3. Не все POP3-серверы поддерживают его. В нем перечислены заголовок для «MSG #» и первые «Строки,» текста в сообщении.
Например, TOP 1 0 — это выведет только заголовки для сообщения 1, в то время как TOP 1 5 — выведет заголовок и первые 5 строк текста сообщения.
Это номер сообщения «MSG #» для удаления с сервера. Это способ, чтобы избавиться от сообщения. Это на самом деле не удаляется, пока QUIT команда не будет введена. Если вы потеряете соединение с почтовым сервером перед выдачей QUIT команду, сервер не должен удалять сообщения.
Это приведет к сбросу (Снимает) любые сообщения ранее помеченные для удаления в этой сессии, так что команда QUIT не будет удалять их.
Вот таким образом, я решил данную задачу, и привел ее в своей статье «Отправка и получение почты через telnet».
Отправка письма из 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 вы можете включить/отключить базовую аутентификацию в настройках принимающего коннектора.
Можно включить базовую аутентификацию из консоли PowerShell (нужно установить EMS на компьютер или подключиться к Exchange Server удаленно):
Если вы не контролируете каналы связи до Exchange, желательно разрешать BasicAuth только после установки, защищенной TLS сессии. Включите опцию Offer basic authentication only after starting TLS в свойствах коннектора в EMC, или воспользуйтесь PowerShell:
Особенности отправки SMTP письма через TLS/SSL описаны в последнем разделе статьи.
Для аутентификации на SMTP сервере через AUTH LOGIN, нужно преобразовать в формат Base64 имя и пароль пользователя, из-под которого будет отправляться письмо. Для преобразования данных в Base64 можно воспользоваться функцией PowerShell:
Или модулем MIME::Base64 в Perl:
Имя пользователя: testuser@contoso.com, в кодировке Base64 получилось: dGVzdHVzZXJAY29udG9zby5jb20=
Пароль: $up3RsTr)ng — в Base64 JHVwM1JzVHIpbmc=

telnet mail.contoso.com 25
Если это хост с Exchange Server, он вернет что-то вроде;
Сначала нужно представиться серверу:
Сервер вернет список поддерживаемых типов аутентификаций и возможностей. Как вы видите базовая аутентификации (AUTH LOGIN) в списке присутствует.
Например, такой ответ SMTP сервера говорит о том, что поддерживаются 3 протокола аутентификации.
PLAIN и LOGIN используют кодировку имени и пароля с помощью BASE64. Отличие между ними в том, что для метода PLAIN логин и пароль передаются одной строкой, а при использовании LOGIN сначала отправляется логин, потом пароль.
Если ваш сервер SMTP поддерживает PLAIN метод аутентификации, можно закодировать имя и пароля с помощью perl функции или PowerShell:
Сообщите SMTP серверу, что вы хотите аутентифицироваться с помощью метода LOGIN:
Сервер должен ответить строкой Username в форматер base64:
334 VXNlcm5hbWU6
AUTH PLAIN XDAwMHRlc3R1c2VyQGNvbnRvc28uY29tXDAwMCR1cDNSc1RyKW5n
Теперь вставьте в консоль закодированное имя пользователя в формате Base64, которое вы получили ранее:
dGVzdHVzZXJAY29udG9zby5jb20=
Сервер должен ответить кодом 334 и строкой Password в base64:
Теперь можно вставить пароль в формате Base64:
JHVwM1JzVHIpbmc=
Если имя и пароль пользователя верны, сервер ответит.
235 2.7.0 Authentication successful
535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6

221 2.0.0 Closing connection.
Connection closed by foreign host.
Через некоторое время проверьте, доставлено ли это письмо в ящик получателя.
Выполняем SMTP аутентификацию через TLS/SSL
Большинство 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, используйте такую команду:
SMTP сервер вернет:
Теперь вы можете выполнить аутентификацию AUTH LOGIN / AUTH PLAIN и отправку письма как описано выше.
Тестирование отправки писем через SMTP в Office 365
В конце октября 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.
Использование telnet для отправки e-mail
Последний вариант команды телнет позволяет подключиться к почтовому серверу без использования клиентского программного обеспечения и даже выполнить отправку простого электронного письма.
Если подключение к серверу по TCP/25 выполнится успешно, то он ответит приглашением, чем-то вроде:
Для организации сессии обмена данными по протоколу SMTP клиент должен представиться серверу с использованием команды HELO и указания своего имени или IP-адреса. Команды протокола SMTP состоят из 4-х символов и могут иметь необязательные параметры. Вводим с клавиатуры
В качестве параметра HELO можно задать localhost или все что угодно, поскольку сервер не выполняет проверку его достоверности, что является одним из недостатков данного протокола.
Вместо команды HELO можно ввести EHLO, и тогда сервер дополнительно к сообщению о начале сессии ответит списком поддерживаемых им SMTP-команд:
Идентификатор ответа 250 означает «выполнено» (или «OK» )
Перечень поддерживаемых команд зависит от программного обеспечения сервера и его настроек. Минимально необходимый для отправки письма набор команд состоит из 3-х:
Формат указания адреса отправителя
Достоверность адреса отправителя сервером не проверяется, что позволяет легко подделывать электронные послания. Пусть будет письмо от Билла Гейтса.
Если команда введена без синтаксических ошибок, то она будет принята, и сервер ответит сообщением с номером 250 (OK):
означающим, что адрес отправителя принят.
Теперь вводим адрес получателя:
Если ввод выполнен без ошибок, сервер подтвердит продолжение сессии сообщением с номером 250:
Сервер предложит ввести текст письма, выдав в ответ на DATA сообщение с номером 354:
Теперь можно вводить любой текст на английском языке:
После ввода точки письмо будет принято к доставке получателю, о чем сервер сообщит кодом 250:
Пример отправки электронного письма с использованием команды telnet всего лишь демонстрирует логику SMTP-сессии, и может быть использован как средство практического изучения протокола SMTP.
Отправка электронной почтты из командной строки.
Для отправки электронной почты из командной строки в операционных системах семейства Windows стандартных средств не предусмотрено, однако можно воспользоваться программным обеспечением сторонних производителей, как, например, бесплатной утилитой Blat
параметры, следующие за «-install» должны располагаться именно в таком порядке:
После выполнения этой команды, в реестре будут созданы ключи, которые могут использоваться программой в качестве входных параметров.
Параметры Blat.exe хранятся в ветке реестра
[HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain]
Профиль по умолчанию хранится в ветке
[HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat]
Настройки для конкретного профиля
[HKEY_LOCAL_MACHINE\SOFTWARE\Public Domain\Blat\имя профиля]
Даже беглый просмотр ключей, используемых программой, говорит о ее обширных возможностях, в том числе, отправку писем в любой кодировке, использование многоцелевого формата почтовых сообщений MIME, отправку с вложением файлов и т.п. Для описания всех возможностей понадобилась бы отдельная книга средних размеров, поэтому ограничусь примерами наиболее частого использования.
Отправка письма с использованием профиля по умолчанию получателю test@ab57.ru:
В ответ будет выдано
Для отправки электронного письма без использования какого-либо профиля, в командной строке blat.exe нужно задать все те данные, которые хранятся в профиле.
Отправка электронного почтового письма используя telnet
В этой короткой записке написано как послать сообщение с помощью утилиты telnet.
Сервер с которого будем отправлять письмо:
Ящик с которого будем отправлять:
Ящик с которого будем принимать:
telnet smtp.yandex.ru 25
220 smtp7.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visihttp://pdd.yandex.ru)
EHLO yandex.ru
250-AUTH LOGIN PLAIN
AUTH LOGIN
Теперь надо ввести учетную запись user@yandex.ru в формате Base64.
Для этого зайдем на сайт http://base64.ru/, введем user@yandex.ru.
В итоге получим dXNlckB5YW5kZXgucnU=
Введем этот код в telnet и получим ответ:
Теперь переведем в Base64 пароль, зайдем опять на сайт http://base64.ru/:
Введем это в telnet и получим ответ:
235 2.7.0 Authentication successful.
Все хорошо, мы авторизировались на почтовом сервере yandex’a.
MAIL FROM:user@yandex.ru
RCPT TO:ivani4@yandex.ru
DATA
SUBJECT:
Тут надо написать тему письма, например:
SUBJECT: Привет. Ты когда деньги вернешь?
После ввода темы нажмите ENTER, осталось ввести само сообщение.
После ввода темы сообщения идет тело письма, напишем тут текст:
Дорогой Андрюша, ты вообще офигел или как!
Я от тебя деньги жду уже какой год, если не вернешь завтра, жди моего человека по кличке «Кабан».
Это мое последнее сообщение к тебе.
Этой точкой мы сообщили почтовому серверу, что ввод тела письма окончен и его нужно отправить.
250 2.0.0 Ok: queued on smtp12.mail.yandex.net as Po3vyFvGGo-3fbWF8nL
Завершаем отправку, введем команду команду выхода:
quit
221 2.0.0 Closing connection.
telnet smtp.yandex.ru 25
220 smtp2.mail.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit
EHLO yandex.ru
250-AUTH LOGIN PLAIN
AUTH LOGIN
YW84NkB5YW5kZXgucnU=
RW1wdm1yMjg=
235 2.7.0 Authentication successful.
MAIL FROM: user@yandex.ru
RCPT TO: ivani4@yandex.ru
250 2.1.5 recipient ok
DATA
354 Enter mail, end with «.» on a line by itself
SUBJECT: Привет. Ты когда деньги вернешь?
Дорогой Андрюша, ты вообще офигел или как!
Я от тебя деньги жду уже какой год, если не вернешь завтра, жди моего человека по кличке «Кабан».
Это мое последнее сообщение к тебе.




