synapse

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение Trezub » 14.11.2005 19:38:23

работаю я с компонентом synapse, а именно с сообщениями по протоколу POP3. Сообщение закачиваю, но вот проблемы с сохранением вложения. Иногда все гладко, но, насколько я понимаю, вся беда в определении, в какой же части (message party) расположен файлик.

меня смущает вот это из help-а:
property AttachInside: boolean read FAttachInside;
When is True, then this part maybe(!) have included some uuencoded binary data.

я так понимаю, в этом моя проблема :)

Так как оно не определяет точно, может быть сделать перебором? И запихнуть его в try..except? Буду пробывать, но хотелось бы узнать, как правильно.

помещаю свой код на всякий. Код корявенький, но вы уж простите ;)

<span style='font-size:7pt;line-height:100%'>

var
full: tstringlist;
walk:thookwalkpart;
n:integer;
s:string;
pop1:TPOP3Send;
MessageRes:tmimemess;
countmess: integer;
i2:integer;
flag:boolean;

size, crc:longint;
History: THistoryFile;
SizeMail: THistoryFile;
filename11:string;
isiz:integer;

begin          //1


..........вырезано........

         messageRes:=Tmimemess.create;
         messageRes.Lines.assign(pop1.FullResult);
         messageRes.DecodeMessage;

    if (Pos('res', messageres.Header.Subject) > 0) then
       begin                  //3
          
          crc:=crc32(messageres.Header.MessageID);
          if not History.Exists(Size,CRC) then
            begin               //4

             history.add(size,crc);


    for i2:=0 to messageres.MessagePart.GetSubPartCount-1 do

       begin                         //5
       messageRes.messagepart.GetSubPart(i2).DecodePart;
       if messageRes.messagepart.GetSubPart(i2).AttachInside then
                begin                    //6
                                             filename11:=messageRes.messagepart.GetSubPart(i2).FileName;
                               form1.lb.items.Add(Presult+'\'+messageRes.messagepart.GetSubPart(i2).FileName);
                                             if not FileExists(Presult+'\'+messageRes.messagepart.GetSubPart(i2).FileName) then
                          messageRes.messagepart.GetSubPart(i2).decodedLines.SaveToFile(Presult+'\'+messageRes.messagepart.
GetSubPart(messageres.MessagePart.GetSubPartCount-1).FileName)

                          else

                              begin
                                filename11:=messageRes.messagepart.GetSubPart(i2).FileName;
                                form1.lb.items.Add('присоединенный файл '+Presult+'\'+messageRes.messagepart.GetSubPart(messageres.
MessagePart.GetSubPartCount-1).FileName + ' уже создан');
                              end;
                   flag:=true;

                end;                      //-6
       end;              //-5
       if flag=false then
                    if not FileExists(Presult+'\'+messageRes.messagepart.GetSubPart(messageres.MessagePart.GetSubPartCount-1).FileName) then
                    begin
                      messageRes.messagepart.GetSubPart(messageres.MessagePart.GetSubPartCount-1).decodedLines.SaveToFile(Presult+'\'+messageRes.
messagepart.GetSubPart(messageres.MessagePart.GetSubPartCount-1).FileName);
                      filename11:=messageRes.messagepart.GetSubPart(messageres.MessagePart.GetSubPartCount-1).FileName;
                    form1.lb.items.Add(Presult+'\'+messageRes.messagepart.GetSubPart(messageres.MessagePart.GetSubPartCount-1).FileName);
                     end
                  else
                    begin
                        form1.lb.items.Add('присоединенный файл '+Presult+'\'+messageRes.messagepart.GetSubPart(messageres.MessagePart.
GetSubPartCount-1).FileName+ ' уже создан');
                        filename11:=messageRes.messagepart.GetSubPart(messageres.
MessagePart.GetSubPartCount-1).FileName;
                    end;


</span>
Trezub
новенький
 
Сообщения: 52
Зарегистрирован: 17.09.2005 21:23:04

Сообщение itfx » 15.11.2005 17:58:54

Есть ли вложение - synapse определяет вот так:
Код: Выделить всё
function TMIMEPart.IsUUcode(Value: string): boolean;
begin
 Value := UpperCase(Value);
 Result := (pos('BEGIN ', Value) = 1) and (Trim(SeparateRight(Value, ' ')) <> '');
end;

<_<
Короче - должен быть заголовок типа "BEGIN" судя по всему, да еще нечто в конце part'а после пробела...
Слишком ненадежно на мой взгляд. Не уверен что это описывает все возможные вложения.
В свое время я отлаживал такое выводом всего сообщения в memo построчно.
Сразу видно - где что и как выглядит ;)

Вероятно нужно копать описания формата mime и смотреть как оно (вложение) должно выглядеть... В общем ничем помочь не могу :(
itfx
незнакомец
 
Сообщения: 9
Зарегистрирован: 26.08.2005 15:55:51

Сообщение Trezub » 15.11.2005 18:44:49

вобщем-то я потихоньку разбираюсь.. на самом деле есть два вида - Application и MultiPArt. Так вот если Application - то у меня идет без частей (part). Видимо в самом теле идет. Но не найду возможности декодировать в таком случае. Пытаюсь вручную (ф-я декодирования в компоненте есть). Получается запорченный архив....

уухх....


itfx, спасибо за желание помочь. Так уж одиноко на едине с проблемой :)
Trezub
новенький
 
Сообщения: 52
Зарегистрирован: 17.09.2005 21:23:04


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru