середу, 12 січня 2011 р.

Відправка електронної пошти з "голого" терміналу

Постала задача протестувати відправлення повідомлення напряму через SMTP сервер на самому базовому рівні. Після ґуґлення і читання мануалів ось що вийшло:

1. Згенерувати закодовану автентифікацію
$perl -MMIME::Base64 -e 'print encode_base64("\000логін\@gmail.com\000пароль")' 
        отримуємо щось на зразок:
$ANC70L7Qs9GW0L1AZ21haWwuY29tANC/0LDRgNC+0LvRjA==
Я чомусь не захотів вводити цю команду, бо не працюю з Perl’om, та й не терплю його. Але ніякими онлайн кодувальниками не вдалося зашифрувати як слід. Заковика виходила з пустими байтами представленими тут як \000
Врешті-решт виявилося, що перл був встановлений разом з усіма необхідними залежностями і, змарнувавши з півгодини пробуючи різні варіанти, ввів цю команду і відразу отримав те, що треба.

2. Далі приклад сеансу роботи з сервером SMTP
$openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587
 ...
 багато буков
 ...
>ehlo test
>250-mx.google.com at your service, [194.000.000.000]
>
>auth plain
ANC70L7Qs9GW0L1AZ21haWwuY29tANC/0LDRgNC+0LvRjA==
>235 2.7.0 Accepted
>
>mail from:<логін@gmail.com>
>250 2.1.0 OK n15sm6315669fam.12
>
>rcpt to:<логін@mail.ru>
>250 2.1.5 OK n15sm6315669fam.12
>
>data
>354  Go ahead n15sm6315669fam.12
>
>Content-type: text/plain; charset=UTF-8
>From: логін@gmail.com
>To: логін@mail.ru
>Subject: ПЕревірка 11
>Date: Sat, 8 Jan 2011 02:45:09 +0200
>
>Преревірка
>.
>250 2.0.0 OK 1294869495 n2sm419943fam.4
>
Можна після DATA відразу писати повідомлення без всіляких там "Content-type".
Закінчуємо писати листа і відсилаємо повідомлення ввівши крапку "." в новому рядку. Далі можна надсилати іншого.
Ось як виявляється все просто. Щоб відіслати електронного листа можна обійтися одним терміналом. Єдине, має бути встановлений openssl. Але якщо сервер SMTP не вимагає для авторизації SSL/TLS, то можна вводити пароль простим текстом.

Додавання до повідомлення аттачів теж абсолютно тривіальна задача: просто взяти за приклад джерельний код будь-якого повідомлення з аттачем. Крім того, фанатики можуть почитати RFC 821 і RFC 5321

За мотивами http://qmail.jms1.net/test-auth.shtml

До речі. Зараз спробував ввести просто telnet smtp.mail.ru 587 і теж все пройшло успішно. Але там не вимагають STARTTLS. На smtp.gmail.com так не проходить.

1 коментар:

OdisseyRV сказав...

"не працюю з Perl’om, та й не терплю його"
А чим він тобі не подобається? В даному випадку без нього і обійтися важко було ;)