Записки IT специалиста
Очень часто перед администратором встает необходимость проверить работу почтового сервера по протоколу SMTP, как своего, так и чужого. Обычно это связано с проблемами отправки или получения почты и следует не только убедиться в доступности сервера, но и понять, что происходит с письмом дальше. Несмотря на то, что существуют различные сервисы для диагностики почтовых систем, лучше всего проверить работу сервера подключившись к нему через Telnet и отправив письмо при помощи SMTP-команд, получив необходимую информацию, что называется «из первых рук».
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Несмотря на кажущуюся сложность этого метода, он достаточно прост и необходимость ручного ввода SMTP-команд не должна вас пугать. Зато вы сможете получить всю необходимую для диагностики информацию прямо здесь и сейчас, не оглядываясь на возможности и ограничения сторонних сервисов.
Поставим себе некую задачу. Допустим мы хотим проверить доставку почты c некого ящика example@interface31.ru на ящик test@host31.ru, а также проверить работу сервера в некоторых иных ситуациях.
Прежде всего сразу следует выяснить какой узел в указанном домене отвечает за прием почты, это следует сделать даже если вы знаете точный адрес этого сервера, так как позволит выявить возможные ошибки при настройке DNS. Для этого мы будем использовать утилиту nslookup, в Windows она входит в штатный комплект поставки, а в Linux вам возможно потребуется установить пакет dnsutils.
Для получения записей MX-хостов узла (т.е. серверов, принимающих почту) выполним:
В качестве ответа вы должны получить имя одного или нескольких серверов.

В нашем случае почта обслуживается серверами Яндекса, а именно mx.yandex.net, с которым мы и будем работать. Для дальнейших действий нам потребуется telnet-клиент, в Linux он есть из коробки, в Windows его следует установить в дополнительных компонентах или использовать любой сторонний клиент, поддерживающий этот протокол, например, PuTTY. В нашем примере будет использоваться telnet-клиент в Debian 10.
Прежде всего запустим самого клиента:
в ответ мы увидим строку приглашения, куда введем строку соединения с сервером, обычно используется порт 25, но могут также быть 465 или 587:
В ответ мы должны получить сообщение с кодом 220, которое содержит имя узла, работающего с нами.
![]()
Обратите внимание, что оно отличается от адреса, к которому мы подключались. Это связано с тем, что почту могут обслуживать несколько серверов и при обращении к домену mx.yandex.net каждый раз будет выдаваться разный адрес, для распределения нагрузки между серверами. В этом несложно убедиться, выполнив еще раз команду nslookup, без аргументов она сообщит нам А-записи, которые соответствуют адресам серверов.

Поэтому, если вы испытываете проблемы доставки с одной из таких почтовых систем, то следует проверить все доступные сервера, подключившись к ним уже не по имени, а по IP-адресу, так как проблемы могут быть только с одним из них.
После того как мы подключились к серверу нужно отправить приветствие, которое будет содержать полное доменное имя клиента (либо адрес, если клиент не имеет доменного имени):
На приветствие сервер отвечает кодом 250 OK и сообщает поддерживаемые SMTP-расширения, это означает что сервер готов к получению почты.
![]()
Для начала почтовой сессии введите команду:
Она означает, что мы хотим передать сообщение от отправителя example@interface31.ru, на что сервер должен ответить нам кодом 250 2.1.0 ok.
Теперь укажем получателя:
Также мы можем попросить сервер отправить нам отчет о доставке или невозможности это сделать, для этого добавим в команду необязательные параметры:
Если все хорошо, то сервер должен ответить нам с кодом 250 2.1.5 recipient ok, после чего мы можем перейти к передаче письма.

Для этого введем команду:
В ответ мы получим сообщение с кодом 354, которое разрешит нам ввод письма, которое следует закончить точкой с новой строки.
В первую очередь следует указать тему:
Затем вводим пустую строку, по правилам тему письма следует отделять от тела пустой строкой, и далее пишем текст сообщения. Количество символов и строк не ограничено, главное — не превысить допустимый размер письма. Закончив, ставим точку в новой строке и нажимаем Enter.
После чего сервер выполнит попытку отправки нашего письма и сообщит нам результат.
![]()
В нашем случае письмо принято к доставке, о чем говорит код 250 2.0.0 Ok, также сервер сообщает нам присвоенный письму идентификатор. Его можно использовать при дальнейшем поиске сообщения в недрах самой почтовой системы. Обратите внимание, что этот код не говорит о том, что письмо успешно доставлено получателю, в дальнейшем оно может попасть под фильтры и оказаться в спаме, но это уже находится за рамками работы протокола SMTP, свою работу в данном случае он выполнил.
С какими ошибками доставки мы можем столкнуться? Одна из самых распространенных — неверный получатель. Попробуем указать в качестве получателя несуществующий ящик test@mail.ru, здесь мы также указали необслуживаемый данным сервером домен, что позволят дополнительно проверить сервер на открытый релей. В подавляющем большинстве случаев нормально работающий сервер не должен пересылать не предназначенную ему почту из публичных сетей.
В данном случае все закончилось быстро, сервер сообщил нам с кодом 550 5.7.1 No such user! , что такого пользователя не существует, а когда мы попытались упорствовать, сообщил с кодом 503 5.5.4 Bad sequence of commands о неверной последовательности команд.

Еще одна часто встречающаяся ситуация — это технология серых списков. Ее суть заключается в том, что если отправитель первый раз присылает почту и в его отношении есть некоторые сомнения, то данные о нем вносятся в серый список, а ему выдается сообщение о временной недоступности сервера. Смысл такого поведения заключается в том, что нормальный сервер повторит отправку, в то время как спамерские скрипты этого обычно не делают. Кроме того, согласно требованиям протокола SMTP, повторную отправку следует производить не ранее, чем через полчаса.
Для проверки мы отправили сообщение с подделанным отправителем и сразу же получили ошибку 451 4.7.1 Sorry, the service is currently unavailable. Please come back later.
![]()
Чтобы убедиться, что вы действительно имеете дело с серыми списками, а не временными неполадками на сервере, повторите отправку спустя полчаса, она должна увенчаться успехом.
Для окончания сессии с сервером введите команду
Как видим, работа с почтовым сервером по протоколу SMTP через Telnet не сложна, но в тоже время предоставляет широкие возможности по диагностике сервера и позволяет быстро найти и выявить причины возможных проблем с доставкой почты.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
![]()
Или подпишись на наш Телеграм-канал: ![]()
Как проверить smtp сервер через telnet
![]()
If you want to test your SMTP server is working correctly, you can use the telnet feature within Windows. The following guide will walk you through the steps to carry this out.
Telnet to test your SMTP server
Just open up an elevated command prompt then enter these commands in turn:
This should then connect to your domain and you will see a message like this:
Then run this command:
This should then give you a 250 response:
Then run this command for your sender address:
This should give you a 250 OK response:
Then run this command for the recipiant of the email:
rcpt to: receive@techygeekshome.info
Then type data and hit the Enter key. If this has worked, you should get a response with a 250 2.6.0 in there and an email address.
Feedback
We would love to hear your feedback on this article so come and join us on Facebook or Twitter and let us know what you think!
How to Test an SMTP Server with Telnet

One way to test your mail server is to connect to it through a Telnet session rather than through an email client. If you can send an email directly from the mail server’s operating system and it actually arrives at its intended destination, then your email system troubleshooting has at least confirmed that you have the right mail server address, the right username, and the right password.
So, if you can’t get your email client to send any mails, then the problem lies with your client.
By confirming all of the details that you have for your mail server by logging into it directly with Telnet, you narrow down the source of your email problems.
Getting Telnet
Telnet is available in Windows 10 but it isn’t activated. To get Telnet operating:
1. Type Telnet into the search field in the toolbar at the bottom of your desktop.
2. Click on Turn Windows features on or off. This opens a pop-up window.
3. Scroll down to Telnet Client, check the box next to it and press the OK button. 
A progress window will appear and show the process of installation for Telnet. Once the installation has finished, the window will close.
4. Type Telnet into the search box again.
This time you will see the Telnet utility appear as the best match for your search. Click on this option to open a Telnet Window.
The command prompt in the Telnet window should display Microsoft Telnet>.
Gather required information
You need the following information from your email or web host in order to proceed:
- Email server name – this will be listed as the Outgoing Server in your Email settings within your hosting plan.
- Email account – if you haven’t set up an email account yet within your hosting service, do that now.
- Account password – if you can’t remember the password you gave for your email account, reset it.
Note down these three pieces of information.
You need to convert your username and password into the Base64 format in order to pass the authentication phase of the test.
1. Go to base64encode.org in order to convert your credentials.
2. Enter your email address in the top field of the web page.
3. Press the Encode button.
You will see the encoded version of your address in the bottom field of the screen.
4. Open another tab and surf to the same website again.
5. Enter your password this time to get its encoded version.
As the Telnet window doesn’t stretch across the screen, you can overlay that window over each tab for your email address and password so you can see the encoded results of each value as you type them in. That has less risk of transposition error than writing down the encoded values on a piece of paper.
Connecting to your mail server
Telnet will use port 23 by default if you don’t enter a port number at the end of the open command. Port 23 won’t get you into your SMTP server.
SMTP uses three ports: 25, 465, and 587. All of the other advice pages on the web that include tips on how to access SNMP with Telnet tell you to use port 25. However, I tried that with three different SMTP servers and it didn’t get me in. I also couldn‘t get into any SMTP server with port 465. Port 587, however, works.
In this example, the mail server name in the screenshot is mail.alljewelrycenter.com. When you copy these commands, replace that email server name with the name of your email server. Also where you see values in angle brackets (<>) replace those with your own information – including deleting the angle brackets.
1. Open a connection to the mail server.
2. Enter open <your_mail_server_name> 587 and press Return.
Once you are in the environment for the mail server, Backspace and Delete do not work. It also isn’t possible to paste values into the screen, which is unfortunate because getting the SMTP server to accept your instructions requires you to type in those Base64 values. If you make a mistake, press Return and start again.
Sending an email
1. Enter EHLO <your_domain_name> and press Return.
2. Enter AUTH LOGIN and press Return.
3. Now you need to enter the Base64 version of your email address without making any mistakes. Press Return.
4. Enter the Base64 version of your password and press Return.
Hopefully, you will see the message: 235 Authentication succeeded.
5. Enter MAIL FROM:<your_email_address> and press Return.
You should see the message: 250 OK.
6. Enter RCPT TO:<destination_email_address> and press Return.
You will see the message: 250 Accepted.
7. Enter DATA and press Return.
8. Enter Subject: Test and press Return.
9. Enter Test message and press Return.
10. Enter . and press Return.
Note: A full stop on a line by itself is the signal to the SNMP server that input has ended.
You will see the message OK followed by an ID code. Your email has been sent. You can see a screenshot of a successful SMTP test below.

11. Check the Inbox of the email account that you sent the email to in order to confirm that the process worked.
You will notice that the email doesn’t have a sender’s email address in it.
12. Go back to the Telnet window, enter quit to close down the connection to the SMTP server, and then enter quit to close the Telnet window.
Troubleshooting email setup
If you get to the end of the test, then you know there is nothing wrong with your email server or the address and credentials that you have noted down in order to get access to it.
If the SMTP server gave you an error message that the origin email address wasn’t valid, that could be because you wrote it down wrong. It could also mean there is something wrong with your email account and that could be the reason that you can’t get it to work in your new email client.
Hopefully, carrying out a test of your SMTP server through Telnet away from your new email client will help you narrow down all the potential reasons for any email problems that you are experiencing.
SMTP server test FAQs
How do I test my SMTP server?
You can do a quick check to see whether your SNTP server is active a available for connections by using Telnet. Follow these steps:
- Type cmd in the Start menu search field and select Command Prompt from the results.
- At the command prompt enter telnet <mail server address> 25
- Check the response.
- Type QUIT to exit Telnet.
Substitute the address of your mail server in the above command where it says <mail server address> – don’t leave the angle brackets in (<>). The response you get to the Telnet command will tell you whether your SMTP server is contactable.
How do I ping my SMTP server with a port?
The Ping command doesn’t offer the option of testing a specific port. It only tells you whether a specific computer is connected to the Internet. In order to check if the SMTP port is open on a specific server, use the telnet command instead.
What port to connect ot SMTP?
SMTP is available on port 25. You might see that ports 465 and 587 are used by SMTP. While this is true, do not use these port numbers in your email testing transactions.
Диагностика почтовых протоколов
Эта статья о методах диагностики почтовых протоколов. Она предназначена для начинающих администраторов, желающих больше узнать об инструментах для быстрого тестирования авторизации/отправки/приема почтовых сообщений как сервером, так и клиентом. Но также может служить хорошей памяткой соответствующих команд и для более опытных администраторов.
Материал разбит следующим образом:

1. Введение
В сети достаточно материалов по отдельным пунктам, но все разбросано по разным местам и, когда возникает необходимость выполнить ту или иную операцию, приходится по разным ресурсам вспоминать нюансы авторизации, способы быстрой кодировки в base64, ключи к openssl и tshark. Здесь все собрано вместе, а также добавлена информация о дешифровке SSL/TLS трафика.
Обозначения
$ — приглашение в обычном шелле, указанная после него команда выполняется от обычного пользователя
# — приглашение в рутовом шелле, указанная после него команда выполняется с правами администратора
## — строка с комментарием
Запрос клиента в почтовых сессиях выделен жирным шрифтом.
Почтовые порты
Основные порты, использующиеся в работе почтовых серверов по RFC (документы, регламентирующие работу сети интернет и ее основных компонентов):
- 25/tcp SMTP (стандартный порт)
- 465/tcp SMTPS (устаревший)
- 587/tcp submission (порт для обслуживания клиентов)
- 110/tcp POP3 (стандартный порт)
- 995/tcp POP3S (порт с предварительной установкой SSL/TLS соединения)
- 143/tcp IMAP (стандартный порт)
- 993/tcp IMAPS (порт с предварительной установкой SSL/TLS соединения)
Здесь перечислены только основные, помимо них разные реализации серверов могут использовать другие порты для своих служебных целей, для пользовательского и административного веб-интерфейса, общения узлов кластера и т.д.
Используемые и рекомендуемые утилиты
В статье используются telnet, openssl, tshark. Для наглядности взаимодействия сервера и клиента, использования команд протокола. На регулярной основе и для автоматизации каких-то процессов можно использовать утилиты, которые скрывают от нас все эти детали, но которые проще включаются в скрипты. Из таких утилит могу порекомендовать скрипт на perl smtp-cli (http://www.logix.cz/michal/devel/smtp-cli/), обладающий широкой функциональностью, в том числе и возможностью SMTP авторизации. Также рекомендую утилиту imtest из состава cyrus-clients, которой можно протестировать IMAP протокол. smtp-sink, утилиту из состава postfix, которая эмулирует почтовый сервер. С ее помощью можно отлаживать работу почтового клиента в том случае, если нет ни доступа к существующим почтовым серверам, ни возможности включения в настройках клиента подробного журналирования.
При помощи nmap можно быстро проверить, доступны ли порты снаружи, то есть, слушаются ли они программами и не закрыты ли при этом файерволом:
По этому выводу видно, что на сервере доступны SMTP/IMAP порты, но недоступны порты для
POP3 протокола.
Через netstat можно посмотреть не только прослушиваемые и используемые порты, как часто предполагают, но и процессы, связанные с этими портами. Вот вывод netstat для этого же почтового сервера:
В этом примере в качестве SMTP сервера используется postfix и dovecot в качестве IMAP. POP3 в списке отсутствует, так как в настройках dovecot этот протокол отключен, как неиспользуемый.
В современных дистрибутивах пакет net-tools уже часто не ставится, считается устаревшим. В качестве замены испольуется утилита ss из состава iproute. Это более узко заточенная и в свой области, вероятно, более функциональная утилита с возможностью настройки фильтров как в tcpdump/tshark. Но мне, например, не нравится, как у нее отформатирован вывод информации. Чтобы чуть это исправить, можно использовать sed:
*) для удобства использования можно поместить следующую bash функцию в
2. Примеры сессий
Здесь приведены примеры сессий по SMTP/IMAP/POP3 протоколам. Для соединения используется клиент телнет, который либо в системе установлен по-умолчанию, либо устанавливается из репозиториев: