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