Иногда нужно проверить работу почтового сервера, посмотреть, как он отвечает на те или иные команды. Или например отправить сообщение из простого скрипта (.bat), не используя сторонние программы.
Для этих целей я расскажу, как это сделать и как в теле письма отправить текст на русском языке в нужной кодировке (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: <[email protected]>
Ответ:
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/