Статті - мережа - відправка по smtp з авторизацією

Отже, тепер коротко, що таке SMTP - Simple Mail Transfer Protocol. Завдання протоколу - це зручна передача електронної пошти. Але якщо не робити відступів і не вдаватися в подробиці, то це просто деяка кількість команд і "спецсимволов", що дозволяють відправляти листи. Для того, щоб власноруч поспілкуватися з сервером, можна взяти звичайний телнет (Пуск-Виконати-telnet) і зайти на 25 порт сервера.

Робиться це командою open smtp.servak.net 25. І, якщо все пройде вдало, Ви отримаєте відповідь від сервера.

Далі слід почати роботу з сервером, а для цього його треба привітати. так як сервер нормальних слів не розуміє, зробити це треба командою EHLO someword [CRLF].

[CRLF] = Enter = 13,10 (кожна команда завершується цією послідовністю байт). Після ствердної відповіді можна приступати безпосередньо до відправки листів.

Але краще раз побачити, ніж 100 разів почути, тому я наведу приклад діалогу з сервером (s - server, u - user):

proc Send_Mail pszmess, pszfrom, pszto, pszlog, pszpass, pszserv, pszsubj

Тут шифрується логін і пароль в Base64, використовується алгоритм by RT Fishel без використання алфавіту. Далі йде робота з WinSocks

Тут в якості параметра gethostbyname передається покажчик на рядок з ім'ям сервера, а потім зі структури hostent витягується sin_addr.

Коннект на 25 порт, тільки потрібно враховувати порядок байт.

Після конекту прочитаємо відповідь сервера.

Слід зазначити, що всі відповіді сервера починаються з певного коду. Неважко помітити, що в разі успіху код починається або з цифри 2, або з 3. На цьому заснована перевірка помилок у процедурі get_data.

Тепер трохи про допоміжних процедурах:

Я не вважаю, що слід розглядати роботу кожної з них, якщо Ви знайомі з WinSocks, то без проблем зробите це самі.

Відсилання логіна і пароля на сервер. szEnd + 3 - покажчик на [CRLF]. Виходить, що ми передаємо рядок, а після цього [CRLF] і Новомосковський відповідь. Далі все по порядку, описаному на початку статті.

Програма відсилає рядки приблизно таким чином:

Щоб передати файл, потрібно в тексті листа створити заголовок виду

Після чого просто передати файл, зашифрований в Base64.

Подяка:
  1. Ct757 за допомогу і утиліту pfcode, яка надала моєму жахливому коду рівний і красивий вид.
  2. Bill Prisoner за ідею написання статті.
  3. revers я б взагалі не чіпав цей СМТП.
Використана література:
  1. Використання сокетів / взаємодія з SMTP-сервера [Billy Belcebu / IKX, пров. Aquila]
  2. Керівництво Beej з мережевого програмування, використовуючи інтернет-сокети [Брайан "Beej" Хол, пров. varnie]
  3. INFECTED VOICE # 15 - Введення. в інтернет. Діалог з SMTP сервером на Assembler
  4. Вихідний код Xinch.
  5. RFC # 821 # 2554

Схожі статті