Thank you for reading this post, don't forget to subscribe!
Иногда нужно проверить работу почтового сервера, посмотреть, как он отвечает на те или иные команды. Или например отправить сообщение из простого скрипта, не используя сторонние программы.
Для этих целей я расскажу, как это сделать и как в теле письма отправить текст на русском языке в нужной кодировке (UTF-8 или KOI8-R).
Первым делом находим имя почтового сервера (для примера возьмем mail.ru):
# nslookup -type=mx mail.ru
В ответ получим:
mail.ru mail exchanger = 10 mxs.mail.ru.
Authoritative answers can be found from:
mxs.mail.ru internet address = 94.100.180.150
mxs.mail.ru internet address = 217.69.139.150
Теперь подключимся к серверу по телнету:
# telnet mxs.mail.ru 25
Ответ:
Trying 217.69.139.150…
Connected to mxs.mail.ru.
Escape character is ‘^]’.
220 Mail.Ru ESMTP
Представимся почтовым сервером, с которого мы отправляем письмо:
HELO мой_почтовый_сервер
Ответ:
250 mx12.mail.ru ready to serve
Вводим адрес отправителя:
MAIL FROM: <test@мой_домен>
Ответ:
250 OK
Вводим адрес получателя:
RCPT TO: <evgen@mail.ru>
Ответ:
250 OK
Вводим ключевое слово, обозначающее начало тела самого письма:
DATA
Ответ:
354 Go ahead
Далее формируем заголовок письма и его текст, к примеру напишем тему письма «test» и текст «ok» (текст пишется между двумя переносами строки). Точка в конце сообщения на новой строке говорит, что письмо сформировано и отправлено:
subject: test
ok
.
Ответ от сервера, что он принял наше письмо.
250 OK id=1c06FT-0006nm-LA
Наше письмо отправлено!
В теле письма могут быть и русские символы и даже html верстка. Единственное, предварительно текст должен быть правильно скодирован.
К примеру, что бы в поле «Тема» написать «тест», нужно в заголовок письма добавить такую строчку:
subject: =?koi8-r?B?9MXT1A==?=
Что бы перевести понятный нам текст в текст понятный для сервера, воспользуемся онлайн сервером-декодером http://foxtools.ru/Base64
Текст внутри заголовка должен находиться в кодировке BASE64. В данном примере я выбрал изначальную кодировку KOI8-R.
А =?koi8-r?B?НАШ_ТЕКСТ_В_BASE64?= говорит о изначальной кодировке текста.
Чтобы написать текст на русском внутри сообщения нам так же его надо перевести в BASE64, а в заголовок письма добавить поля сообщающие серверу изначальную кодировку текста.
В данном примере, я выбрал кодировку UTF-8:
Что бы сервер её понял в заголовок пропишем следующие строки:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
В итоге после поля DATA, наше сообщение будет выглядеть так:
subject: =?koi8-r?B?9MXT1A==?=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base640J/RgNC40LLQtdGCINC80LjRgCE=
.
Так же текст сообщения можно формировать в html. Пример сообщени:
Content-Type: text/html; charset=utf-8
<div style=»text-align:center;»>Привет <span style=»color:#ff0000;»>МИР</span>!</div>
.
Ну и в качестве бонуса посоветую онлайн сервис, через который можно потестировать отправку сообщений http://telnet-online.net/