Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> indy почта 
:(
    Опции темы
Гость_qwerty
Дата 15.7.2004, 12:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











как в indy принимать и посылать файлы в теле письма....

  Вверх
Girder
Дата 15.7.2004, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
type
 TXXX = class(TForm)
   IdMessage: TIdMessage;
   IdDNSResolver: TIdDNSResolver;
   IdSMTP: TIdSMTP;
   IdPOP3: TIdPOP3;
...

procedure ... //при отправке (SMTP)
var sFile:string; //имя присоединенного файла(+путь)
     sFiles:TStrings;
...
begin
...
IdMessage.From.Text := edtSender.text;
...
IdMessage.Body := MessageText.Lines;
...
IdMessage.MessageParts.Clear;
for i:=0 to sFiles.Count-1 do
begin
 sFile:=sFiles.Strings[i];
 TIdAttachment.Create(IdMessage.MessageParts,sFile); //Подцепляем
end;
...
try
IdSMTP.Connect;
IdSMTP.Send(IdMessage);
... //Ну и т.д.


При приеме (POP)см.здесь: http://www.faqts.com/knowledge_base/view.phtml/aid/23223

Удачи.

Это сообщение отредактировал(а) Girder - 18.7.2004, 18:56


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Гость_qwerty
Дата 16.7.2004, 08:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я не это имел в виду....
подцеплять не аттачем, это я могу, а просто писать содержимое в body....
какую кодировку ставить???
  Вверх
Girder
Дата 16.7.2004, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Так ты хочеш файл впихнуть в Body? Он у тебя текстовый?

Или у тебя траблы с кодировкой текста письма? (Типо закорючки в письме rolleyes.gif )


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Гость_qwerty
Дата 16.7.2004, 09:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Файл может быть любой.... предпочтение двоичному...
тема в том что надо отправить и принять файл.... так вот если отправляю файл аттачем, то принимает все ок... а если в теле, то файл получается поврежденным
  Вверх
Girder
Дата 16.7.2004, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Файл надо кодировать.
Посмотри в файле IdCoder3to4.pas: function TIdEncoder3to4.Encode(ASrcStream: TStream; const ABytes: Integer = MaxInt): string;

Это сообщение отредактировал(а) Girder - 16.7.2004, 10:33


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Гость_qwerty
Дата 16.7.2004, 11:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











функция конечно может и поможет, но желательно, чтобы она возвращала поток
  Вверх
Гость_qwerty
Дата 16.7.2004, 13:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











кстати все равно не работает
  Вверх
Girder
Дата 16.7.2004, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Понятное дело, строку надо ещё по идеи конвертировать.

Попробуй так:
Код
var XX:TStrings; // твой файл пропущенный через TIdEncoder3to4.Encode
...
begin
...
IdMessage.Body := XX;
IdMessage.body.Text:=Win_KoiConvert(IdMessage.Body.Text);
...
end;

function TForm1.Win_KoiConvert(const St:string):string;
type
 TConvertChars=array[#128..#255] of char;
const
 Win_KoiChars:TConvertChars=(#128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#060,#139,#140,#141,#142,#143,
                             #144,#145,#146,#147,#148,#169,#150,#151,#152,#153,#154,#062,#176,#157,#183,#159,
                             #160,#246,#247,#074,#164,#231,#166,#167,#179,#169,#180,#060,#172,#173,#174,#183,
                             #156,#177,#073,#105,#199,#181,#182,#158,#163,#191,#164,#062,#106,#189,#190,#167,
                             #225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240,
                             #242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#154,#249,#248,#252,#224,#241,
                             #193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208,
                             #210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#209);
var i: integer;
begin
 Result:=St;
 for i:=1 to Length(St) do
  if St[i]>#127 then
   Result[i]:=Win_KoiChars[St[i]];
end;


А зачем тебе в теле именно посылать? (Если не секрет).

Если не по может. Покажи код и завтра по копаюсь.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Girder
Дата 17.7.2004, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Даже можно не пользоваться TIdEncoder3to4.Encode, а написать свою.
Чтобы место выиграть(на верно обращал что при вложении ты отправляеш больше байт - причину см. в IdCoder3to4.pas).

Так у тебя получилось или нет?
Если нет то смотри: Если ты записываеш свой файл в Body, то перед этим надо избавится(то есть перекодировать) от нулевых символов и кареток перехода в файле. После чего записываеш получившийся массив строк в Body(возможно ещё придется применить конвертацию в твою кодировку).
При приеме этого файла тебе надо будет только перекодировать данный файл обратно и все.

Удачи.

Это сообщение отредактировал(а) Girder - 17.7.2004, 17:24


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Girder
Дата 18.7.2004, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Вот набил перекодировачные функции. Попробуй с ними.
Формат вызова;
Код

procedure //отсылка
var NN:TStrings;
    sF:String; //имя посылаемого файла
...
begin
...
sF:='E:\pagefile.sys';
if LoadFileToStr(sF,NN) then
 begin
  IdMessage.Body:=NN;
  ... //заполнение IdMessage и посылка письма Send
 end;
end;

procedure //прием
var NN:TStrings;
    sF:String; //имя файла для записи на диск
...
begin
...//Проверка сервера и прием файла
NN:=IdMessage.Body;
sF:='E:\UserLox.sys';  
if StrToSaveFile(sF,NN) then ShowMessage('Типо - все записанно');
...
end;


Сами функции:
Код
function TForm1.LoadFileToStr(var lFile:string;Str:TStrings):boolean;
//Шифрование файла;
Const maxSizeOf_Str=75000; //максимальная длина шифрованной(текстовой) одной строки
var x,ByteRead,lStr,c_Bit:integer;
   ft:integer;
   t:array [1..(maxSizeOf_Str*7 div 8)] of char;
   s:string;
   p_I,p_O:PChar;
   d_EBX,d_ECX:DWord;
label Goto_F,Goto_F2,GotoErr;
begin
try
 Str.Clear;
except
 Str:=TStringList.Create;
end;
Result:=false;
ft:=fileopen(lFile,fmOpenRead);
if ft<>-1 then
 begin
  x:=sizeof(t);
  d_EBX:=0;
  c_Bit:=0;
  repeat
   ByteRead:=FileRead(ft,t,x);
   if ByteRead>0 then
    begin
     d_ECX:=7-c_Bit;
     lStr:=(ByteRead*8+c_Bit) div 7;
     c_Bit:=(ByteRead*8+c_Bit) mod 7;
     SetLength(s,lStr);
     p_I:=@t;
     p_O:=PChar(s);
     asm
      pushfd
      pushad
      mov esi,p_I
      mov edi,p_O
      mov edx,ByteRead
      mov ecx,d_ECX
      mov ebx,d_EBX
      cld
@Ok_EDX:      
      lodsb
      shrd ebx,eax,cl
      shr ebx,1
      or ebx,80000000h
      shrd ebx,eax,8
      push ebx
      shr ebx,10h
      mov al,bl
      pop ebx
      stosb
      dec ecx
      jne @Ok_ECX
      mov ecx,7
      shr ebx,19h
      mov al,bl
      or al,80h
      stosb
@Ok_ECX:
      dec edx
      jne @Ok_EDX
      mov d_EBX,ebx
      popad
      popfd
     end;
     Str.Add(s);
    end;
  until (ByteRead<x);
  if c_Bit<>0 then
   begin
    s:=chr((d_EBX shr ($20-c_Bit))+$80);
    Str.Add(s);
   end;
  FileClose(ft);
  Result:=True;
 end;
end;

function TForm1.StrToSaveFile(var sFile:string;Str:TStrings):boolean;
//Дешифрование файла;
var i,j,lt,ByteWrite,n,c_Bit:integer;
   ft:integer;
   s:string;
   t:array of char;
   p_I,p_O:PChar;
   d_EBX,d_ECX:DWord;
begin
Result:=false;
try
 i:=Str.Count;
except
 i:=-1;
end;
if i<0 then exit;
ft:=fileCreate(sFile);
if ft<>-1 then
 begin
  if i=0 then
   begin
    FileClose(ft);
    Result:=True;
    exit;
   end;
  j:=0;
  d_EBX:=0;
  c_Bit:=0;
  repeat
   s:=Str.Strings[j];
   n:=Length(s);
   d_ECX:=$18-c_Bit;
   lt:=(n*7+c_Bit) div 8;
   c_Bit:=(n*7+c_Bit) mod 8;
   if lt>0 then
    begin
     SetLength(t,lt);
     p_I:=PChar(s);
     p_O:=PChar(t);
     asm
      pushfd
      pushad
      mov esi,p_I
      mov edi,p_O
      cld
      mov edx,n
      mov ebx,d_EBX
      mov ecx,d_ECX
      cmp ecx,18h
      jne @ECX_18
      mov ecx,11h
      jmp @ECX_11
@ECX_18:
      inc ecx
      dec edx
      jl @Ok_Exit
      lodsb
      shrd ebx,eax,7
      mov eax,ebx
      shr eax,cl
      stosb
      cmp ecx,18h
      jne @ECX_18
      mov ecx,11h
      and edx,edx
      je @Ok_Exit
@ECX_11:
      lodsb
      shrd ebx,eax,7
      dec edx
      jne @ECX_18
@Ok_Exit:
      mov d_EBX,ebx
      popad
      popfd
     end;
     ByteWrite:=FileWrite(ft,p_O^,lt);
     if ByteWrite<>lt then
      begin
       SetLength(t,0);
       FileClose(ft);
       ShowMessage('Типо ошибка и все такое');
       exit;
      end;
    end;
   inc(j);
  until (i=j);
  SetLength(t,0);
  FileClose(ft);
  Result:=True;
 end;
end;


Чиркни результат работы.

Удачи.

Это сообщение отредактировал(а) Girder - 18.7.2004, 20:19


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Girder
Дата 18.7.2004, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата
Если ты записываеш свой файл в Body, то перед этим надо избавится(то есть перекодировать) от нулевых символов и кареток перехода в файле.
Так оно и оказалось.

У меня работает.

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Гость_qwerty
Дата 19.7.2004, 12:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Все конечн здорово... пасиб дорогой..... работает отлично...
но раз уж использую indy, то надо его добить... и добил...
encoder и decoder работает, но есть огрех один, из-за которого голову сломал.
encoder при кодировке добавляет в конец #13#10,
а decoder при раскодировке не убирает его поэтому и получается несовпадение.... а так все есть гуд
  Вверх
Girder
Дата 19.7.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата
...но раз уж использую indy, то надо его добить... и добил...
encoder и decoder работает,...
sad.gif А я то подумал что ты хочеш стандартное кодирование присоединенных злементов(для писем) обойти. Что-б только твоя прога могла принятое письмо (с нагрузкой) декодировать biggrin.gif .



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Гость_qwerty
Дата 19.7.2004, 13:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да не расстраивайся... ты молодец
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.