• XSS.stack #1 – первый литературный журнал от юзеров форума

SMTP

mr. Eof

HDD-drive
Пользователь
Регистрация
25.01.2006
Сообщения
25
Реакции
0
Всем привет!

Так. Читаю стандарт SMTP и не вижу какой командой задать тему отправляемого письма?? Это же вроде бы - Subject да? Но господа! НЕТ! Не она!!! Не подскажете что это?

И еще! Как прикрепить файл к письму? Тоже не понимаю! Если кто может объяснить, то буду очень признателен! Спасибо!

PS: google и тд - спрашивал...
 
так это - не важно совершенно. это зависит не от языка. Команды - везде одни. Что в С, что в Pascal.. Не важно.

PS: пишу на Делфи
 
В SMTP-протоколе нету команды для задания темы электронного сообщения, ибо это не относится к протоколу. Чтобы задать тему сообщения, необходимо послать соответствующий "хидер" после команды DATA.

Например:

Послали: MAIL FROM:<bill_gates@microsoft.com>
Получили: 250 OK

Послали: RCPT TO:<admin@xss.pro/>
Получили:250 OK

Послали: RCPT TO:<webmaster@xss.pro/>
Получили:250 OK

Послали: DATA
Получили:354 Start mail input; end with <CRLF>.<CRLF>

Послали: Date: 13 Oct 07 17:30:00
Послали: From: bill_gates@microsoft.com
Послали: To: admin@xss.pro/
Послали: Subject: New BUG in my OS
Послали:
Послали: I have a bug...
Послали: Help me...
Послали: Bla... Bla... Bla... Bla...
Послали: <CRLF>.<CRLF>
Получили: 250 OK

и т.д.
 
Что касается писем со вложениями:

Отправляем: MAIL FROM:<bill_gates@microsoft.com>
Получаем: 250 OK

Отправляем: RCPT TO:<admin@xss.pro/>
Получаем: 250 OK

Отправляем: RCPT TO:<webmaster@xss.pro/>
Получаем: 250 OK

Отправляем: DATA
Получаем: 354 Start mail input; end with <CRLF>.<CRLF>

Отправляем: Date: 13 Oct 07 17:30:00
Отправляем: From: bill_gates@microsoft.com
Отправляем: To: admin@xss.pro/
Отправляем: Subject: New BUG in my OS
Отправляем: Mailer: Evil-Evil Mailer
Отправляем: MIME-Version: 1.0
Отправляем: Content-Transfer-Encoding: 8bit
Отправляем: Content-Type: multipart/mixed; boundary=MY_BOUNDARY
Отправляем: This is a multi-part message in MIME format.
Отправляем: <CRLF>
Отправляем: --MY_BOUNDARY
Отправляем: Content-Type: text\plain
Отправляем: <CRLF>
Отправляем: I have a bug...
Отправляем: Help me...
Отправляем: Bla... Bla... Bla... Bla...
Отправляем: See sploit in attach...
Отправляем: --MY_BOUNDARY
Отправляем: Content-Type: application/octet-stream; name=ИМЯ_АТАЧА);
Отправляем: Content-Disposition: attachment; filename=ИМЯ_АТАЧА);
Отправляем: Content-Transfer-Encoding: base64
Отправляем: <CRLF>
Отправляем: ТУТ ПОСЫЛАЕМ КОНТЕНТ ФАЙЛА В BASE64 КОДИРОВКЕ
Отправляем: <CRLF>
Отправляем: --My_Boundary--
Отправляем: <CRLF>
Отправляем: <CRLF>.<CRLF>
Получаем: 250 OK

Вроде всё... Старался не ошибиться, но не исключено, что где-то вкралась неточность - писал на скорую руку. В общих чертах логика должна быть ясна. Если будут вопросы - пиши, с радостью отвечу.
 
groundhog

Блин, твои посты меня прям порадовали, две недели не заходил сюда, сейчас смотрю как обычно на новые темы и вижу:
AVP 6.0: проблема
Anti Kaspersky
PHPBB: Загрузка произвольного файла через админку
....

И среди всего этого наконец-то вижу нормальную тему, не потому что она по кодингу, а просто потому, что есть исчерпывающий ответ от человека, который сразу видно сам в этом что-то понимает. Спасибо ребята, порадовали :)

PS http://hunger.ru/releases/4
Обычный smtp клиент с интерфейсом написанный на ассемблере с использованием сокетов.
Исходники прилагаются.
 
Спасибо всем!
Кажется почти разобрался и сделал!

PS: А по поводу современных тем (проблема с AVP ...) так и хочется сказать:
"эххххххх.... Молодежж!!" :D
 
Так. Единственное чего я не понимаю это вот:
Код:
...
Отправляем: Content-Type: multipart/mixed; boundary=MY_BOUNDARY
Отправляем: This is a multi-part message in MIME format.
Отправляем: <CRLF>
Отправляем: --MY_BOUNDARY
Отправляем: Content-Type: text\plain
Отправляем: <CRLF>
Отправляем: I have a bug...
Отправляем: Help me...
Отправляем: Bla... Bla... Bla... Bla...
Отправляем: See sploit in attach...
Отправляем: --MY_BOUNDARY
Отправляем: Content-Type: application/octet-stream; name=ИМЯ_АТАЧА);
Отправляем: Content-Disposition: attachment; filename=ИМЯ_АТАЧА);
Отправляем: Content-Transfer-Encoding: base64
Отправляем: <CRLF>
Отправляем: ТУТ ПОСЫЛАЕМ КОНТЕНТ ФАЙЛА В BASE64 КОДИРОВКЕ
Отправляем: <CRLF>
Отправляем: --MY_BOUNDARY--
Получаем: 250 OK
...

1) Что такое "--" перед разделителем MY_BOUNDARY???
2) Кто-нибудь может посоветовать что и где почитать по поводу того как отправить содержимое файла в BASE64 кодировке???
 
1) Что такое "--" перед разделителем MY_BOUNDARY???
2) Кто-нибудь может посоветовать что и где почитать по поводу того как отправить содержимое файла в BASE64 кодировке???
Видать плохо ты прочитал пост #11
Там в темах дан исчерпывающий ответ и даже исходник
с комментами прилагается!
http://www.wasm.ru/forum/viewtopic.php?id=16029
 
Я сейчас просмотрел свои сообщения - да, действительно там были некоторые ошибки... И я немного сухо объяснял, так что давайте ещё разок вернёмся к нашему пресловутому протоколу SMTP, но на этот раз несколько углубимся в его функционирование + рассмотрим принципы организации отправки писем со вложениями. Сразу оговорюсь: <CRLF> - это непечатные символы с десятичными кодами 13 и 10, обозначающие "возврат каретки" и "перевод строки". В своих прежних сообщениях я подразумевал, что они используются в конце каждой строки, отныне я их буду использовать явно (как и пологается). Итак, в бой! В качестве примера, отправим письмо, содержащее три вложения: файл test.txt (текстовый файл), файл test.html (документ html) и файл test.bin (бинарный файл). Само письмо будет отправлено в формате html.

Указываем отправителя письма. Этот адрес будет использоваться SMTP-демоном для отправки уведомления в случае "неудачной" попытки отправки письма. Так же этот адрес используется в антиспамовых защитах.
Послали: MAIL FROM: <sender@localhost.localdomain><CRLF>
Получили: 250 OK

Указываем получателей письма. По этим адресам будут разосланы копии письма, причём совсем не важно какой отправитель будет указан в заголовках самого письма - письмо уйдёт на адреса, посылаемые в команде RCPT TO.
Послали: RCPT TO:<reciever@remotehost.remotedomain><CRLF>
Получили: 250 OK

Ещё один получатель письма. Точно не помню спецификацию SMTP, но кажется таким образом можно указать не более 255 получателей.
Послали: RCPT TO:<otheruser@otherhost.otherdomain><CRLF>
Получили: 250 OK

Сообщаем серверу, что сейчас будем передавать контент письма. Сервер должен ответить кодом 354. По окончании отправки контента, мы должны послать последовательность "<CRLF>.<CRLF>", чтобы просигнализировать серверу об окончании передачи контента письма.
Послали: DATA<CRLF>
Получили: 354 Start mail input; end with <CRLF>.<CRLF>

Посылаем серверу содержимое нашего письма...
Послали: Message-ID: <001><CRLF>
Послали: Date: Sat, 14 Oct 2006 17:57:51 +0400<CRLF>
Послали: From: Sender <sender@localhost.localdomain><CRLF>
Послали: To: Reciever <reciever@remotehost.remotedomain><CRLF>
Послали: СС: Otheruser <otheruser@otherhost.otherdomain><CRLF>
Послали: Subject: Test e-mail for you, my friend!<CRLF>
Послали: User-Agent: Evil e-mail agent 0.0.0.1 (Windows/Unix/MacOS)<CRLF>
Послали: MIME-Version: 1.0<CRLF>
Послали: Content-Type: multipart/mixed; boundary="level_one"<CRLF>
Послали: <CRLF>
Послали: This is a multi-part message in MIME format.<CRLF>
Послали: --level_one<CRLF>
Послали: Content-Type: text/html; charset=koi8-r<CRLF>
Послали: Content-Transfer-Encoding: 7bit<CRLF>
Послали: <CRLF>
Послали: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><CRLF>
Послали: <html><CRLF>
Послали: <head><CRLF>
Послали: <meta content="text/html; charset=koi8-r" http-equiv="Content-Type"><CRLF>
Послали: <title>Test</title><CRLF>
Послали: </head><CRLF>
Послали: <body bgcolor="#ffffff" text="#000000"><CRLF>
Послали: This is a body of the letter in HTML format!<CRLF>
Послали: </body><CRLF>
Послали: </html><CRLF>
Послали: --level_one<CRLF>
Послали: Content-Type: text/plain; name="test.txt"<CRLF>
Послали: Content-Transfer-Encoding: 7bit<CRLF>
Послали: Content-Disposition: attachment; filename="test.txt"<CRLF>
Послали: <CRLF>
Послали: This is TXT file content<CRLF>
Послали: --level_one<CRLF>
Послали: Content-Type: text/html; charset=koi8-r; name="test.html"<CRLF>
Послали: Content-Transfer-Encoding: 7bit<CRLF>
Послали: Content-Disposition: attachment; filename="test.html"<CRLF>
Послали: <CRLF>
Послали: <html><CRLF>
Послали: <head><CRLF>
Послали: <meta http-equiv="Content-Type" content="text/html; charset=koi8-r"><CRLF>
Послали: </head><CRLF>
Послали: <body bgcolor=red><CRLF>
Послали: This is a HTML file content<CRLF>
Послали: <body><CRLF>
Послали: </html><CRLF>
Послали: --level_one<CRLF>
Послали: Content-Type: application/octet-stream; name="test.bin"<CRLF>
Послали: Content-Transfer-Encoding: base64<CRLF>
Послали: Content-Disposition: attachment; filename="test.bin"<CRLF>
Послали: <CRLF>
Послали: FE1Fy6ZMhKnSKlFpESqstmsWAkNh61i2Ret+5737yM1tCXzbq07vPfeec+45554/Nz5KpA8C<CRLF>
Послали: /vGrjfrXP/hpdkdi9z3kJ2qu3HaW8DnolxTb8vy+wluXyQX07K1kfbr4z0/yZ64WAy6Drhxj<CRLF>
Послали: 3xqiXrFpeIkm11rzbzuIThHNGrFNH1Iik+2kTH6tRh9RLJHDOaUaZbJFeiZbSbyWyTJegX0e<CRLF>
Послали: a7G2RsyN2JszG67dlTXlgM4BWbXGaIGMdMFtDBeI2vKrNFrvEXPwlDHupXSuTMjgc27hs1mf<CRLF>
Послали: NaTbMpM0VOCxHaODEjkHZVYznrLP6sxkSc/kS8BriDNZ7jGWm0jnfJizbMYjYt6LeUdnusDn<CRLF>
Послали: 2uelxHlzjZZcb2c6V4z9Z0F71UUf9bLsvpMFXnNDxiGsf4L1JKULXbyXsvZKsNeDvb9grx17<CRLF>
Послали: --level_one--<CRLF>
Послали: <CRLF>
Послали: <CRLF>.<CRLF>
Плучили: 250 OK

Особое внимание прошу обратить на один из главных заголовков письма:
Content-Type: multipart/mixed; boundary="level_one"
Это говорит о том, что письмо будет "смешанным" (то есть, со вложениями). Параметр boundary, указывает идентификатор, которым будут разделяться секции письма. Каждая секция будет начинаться с символов "--" и имени идентификатора, то есть - "--level_one". Всё, что находится между секциями, считается отдельной единицей. После начала секции идут заголовки, описывающие содержимое этой секции, затем идёт <CRLF>, затем идёт содержимое, затем идёт другая секция. Признаком того, что далее никаких секций не будет, и что данная секция последняя служит последовательность, состоящая из имени идентификатора секции, обрамлённого символами "--", то есть "--level_one--". Кажется, всё должно быть понятно... Текстовый и гипертекстовый документ мы передаём в кодировке "7bit", так как он не содрежит символов выходящих за рамки ASCII. Бинарный файл мы передаём в кодировке "base64", так как он может содержать бог знает что... Вот вроде бы и всё...

Если у кого будут вопросы - отвечу с радостью. BUG(O)R, спасибо за добрые слова! :)
 
Что касается кодировки в base64... Для кодирования в base64 используется алфавит "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/". При использовании кодировки base64 требуется форматировать закодированные данные в строки по 76 символов. Группы исходных символов кодируются в соответствующие группы закодированных по вышеприведённому алфавиту. Более подробно о принципах кодировки в base64 можно узнать ЗДЕСЬ.
 
groundhog
на самом деле все просто. 3 байта рассматриваются как 4 6-битных слова. 4 бита кодируют 64 символа, которые выбираются из алфйавитно-цифрового набора.
Если число входных байт не делится на 3, то в конец дописывается мусор, который потом убирается при декодировании
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх