Тестовая отправка email из telnet в нужной кодировке

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: base64

0J/RgNC40LLQtdGCINC80LjRgCE=

.

Так же текст сооб­ще­ния мож­но фор­ми­ро­вать в html. При­мер сообщени:

Content-Type: text/html; charset=utf-8

<div style=»text-align:center;»>Привет <span style=»color:#ff0000;»>МИР</span>!</div>

.

Ну и в каче­стве бону­са посо­ве­тую онлайн сер­вис, через кото­рый мож­но поте­сти­ро­вать отправ­ку сооб­ще­ний http://telnet-online.net/