отправка файла на сервер

Тема в разделе "WASM.NETWORKS", создана пользователем mr_death, 2 янв 2007.

  1. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Здравствуйте. Я столкнулся с такой проблемой, написал программу по отправке писем на сервер mail.ru. Если отправлять в качестве тела сообщения обычный текст – доходит нормально, если файл, то приложение почему-то вешается, не понимаю почему, вроде бы все правильно сделал. Файл кодирую в Base64, затем его отправляю, пробовал по 1 байту отправлять – вешается, целиком – также вешается…помогите, пожалуйста, может я, где-то неправильно реализовал код отправки файла?
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    то что бросилось в глаза - в szAttach_1(2) дописать надо файл, не включая путь. После того, как ты закодировал файл бейс64, его размер уже не pSize, а процентов на 25, наверное, больше
     
  3. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Не совсем понял, т.е. надо указать просто имя файла с расширением? Но тогда, как программа определит путь, какой именно файл и откуда ей надо "приаттачить"?. Если можно поясните на пальцах...

    Это уже сделал
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    да. это будет указывать почтовой программе, с каким именем отобразить вложенный файл
    а ты разве его не читаешь сам? не посылаешь на сервер (в закодированном виде)

    П.С. желательно, чтоб разобраться с вопросом попытаться самому посидеть с отладчиком, да и неплохо бы скомпиленный вариант в архив пихать.
     
  5. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Вот значит, отправку реализовал, письмо с аттачем отправляется, теперь сталкнулся с другой проблемой, при получении письма не могу извлечь аттач, почему?
     
  6. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    смотря как извлекаешь.. а может неправильно посылаешь (скорее всего). на вопрос "почему" можно ответить, если увидеть исходники (желательно с бинарником)
     
  7. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Извините забыл выложить, исправлюсь и выкладываю их
    Вообщем письмо приходит, аттач я кое-как извлекаю, однако там совершенно нет того файла, который я "приаттачивал"... вообщем помогите пожалуйста, в чем я неправ
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    передавай туда pSize, а не lstrlen содержимого файла (ты уверен что фаел не может содержать нулей?)
     
  9. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    исправил.

    Однако все равно проблема не решилась
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. invoke  lstrcpy, addr lpBuffer, addr szFile+1
    2. invoke  lstrcat, addr szAttach_1, addr lpBuffer; эта строчка
    3. invoke  lstrcat, addr szAttach_1, addr szAttachEnd; и эта
    вытрут кусок szAttach_2

    п.с. возьми отладчик, наконец
     
  11. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    А какой вообще должен быть синтаксис отправки письма? т.е. тело письма? Просто у меня он на примере уроков, что на wasm.ru
     
  12. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    т.е. "вытрут" ?
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. invoke  lstrcat, addr szAttach_1, addr lpBuffer;
    добавит lpBuffer сразу после szAttach_1, а там szAttach_2 находится. смотри под отладчиком и учи мсдн наизусть
     
  14. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    будем работать .. потом должу о результатах
     
  15. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Код (Text):
    1. Content-Type: application/octet-stream; name="12345.log"
    2. 2345.log"
    3. Content-Disposition: attachment; filename="12345.log"
    4. 2345.log"
    Вот собственно добился нормальной отправки файла, но есть одно "но", откуда берутся
    Код (Text):
    1. 2345.log"
    вот эти символы, ведь все правильно делаю, и под отладчиком тож смотрел, там все нормуль...
     
  16. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Всю голову себе сломал, незнаю в чем проблема ...
    Помогите пожалуйста, что делаю нетак?
     
  17. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    итак смотрим топики 10-13...
    теперь смотрим код
    Код (Text):
    1. invoke  lstrcpy, addr lpBuffer, addr szFile+1
    2. invoke  lstrcat, addr [b]szAttach_7[/b], addr lpBuffer
    3. invoke  lstrcat, addr [b]szAttach_7[/b], addr szAttachEnd
    4. invoke  SendBodyStr, addr szAttach_7       
    5. invoke  lstrcat, addr szAttach_8, addr szFile+1
    6. invoke  lstrcat, addr szAttach_8, addr szAttachEnd
    7. invoke  SendBodyStr, addr szAttach_8
    а также наши данные.
    Код (Text):
    1. szAttach_7      db  'Content-Type: application/octet-stream; name="', [b]0[/b]
    2. szAttach_8      db  '[b]Content-Disposition[/b]: attachment; filename="', [b]0[/b]
    3. szAttach_9      db  'Content-Transfer-Encoding: base64' ,13, 10, 0
    4. ;затем возврат каретки
    открываем МСДН.
    так. итого при вызове lstrcat к строке, указанной первым параметром, присоеденится строка указанная вторым. первым параметром указана szAttach_7, то есть к ней будет прилепленна ещё строка... куда она будет прилеплена? в конец, т.е. после szAttach_7, а за szAttach_7 идет szAttach_8 и к моменту lstrcat, addr szAttach_8 там будет '2345.log',0, а не Content-Disposition...
     
  18. mr_death

    mr_death New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2005
    Сообщения:
    42
    Большое спасибо :)