Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Распознование вложения в письме   Найти похожие ветки 

 
Progh   (2005-02-06 20:46) [0]

Вот получаю с помощью idPOP3 письмо, в котором есть вложение, далее пытаюсь найти это вложение(if idMessage.MessageParts.Items[j] is TIdAttachment then). Но условие не выполняется не разу, в чем дело ? Ведь в письме 100% есть вложение. Вот полный код ф-ии получения письма :

var
 mc, i, j: integer;
 idMessage: TidMessage;
 _Attach: TIdAttachment;
 fname: string;
begin
 try
   idPop3.Username := User;
   idPop3.Password := Password;
   idPop3.Host := Host;
   idPop3.Port := 110;

   if gm = false then
   begin
     if idPOP3.Connected = true then
       idPOP3.Disconnect;
     idPOP3.Connect;
     gm := true;
     mc := idPOP3.CheckMessages;
     Result.InMailBox := mc;
     Result.Recived := 0;
     if mc > 0 then
       Log.Lines.Add(DateTimeToStr(now) + IntToStr(mc) + " новых пичсем");
     idMessage := TidMessage.Create(nil);
     for i := 1 to mc do
     begin
       IdMessage.Clear;
       idPOP3.Retrieve(i, IdMessage);
       Result.Recived := Result.Recived + 1;

       if SaveToDir[Length(SaveToDir)] <> "\" then
         SaveToDir := SaveToDir + "\";
       ForceDirectories(SaveToDir);

       // TIdAttachment    TIdText
      for j := 0 to idMessage.MessageParts.Count - 1 do
       begin
         if idMessage.MessageParts.Items[j] is TIdAttachment then
         begin
           fName := SaveToDir + (idMessage.MessageParts.Items[j] as TIdAttachment).FileName;
           CopyFile(pchar(idMessage.MessageParts.Items[j].StoredPathName), pchar(fName), false);
         end
       end;

       if idPOP3.Delete(i) = true then
         Log.Lines.Add("Удалили письмо");
     end;
   end;
 finally
   idPOP3.Disconnect;
   gm := false;
 end
end;


 
Slym ©   (2005-02-07 05:43) [1]

CopyFile(pchar(idMessage.MessageParts.Items[j].StoredPathName), pchar(fName), false);

1 - TIdAttachment(idMessage.MessageParts.Items[j]).StoredPathName
2- А вдруг они уберут StoredPathName? (я например убираю сразу! MessageParts хранятся в MemoryStream, минимальная переделка исходника) а SaveToFile оставят...
3- Первый MessagePart текстовый! т.е. само тело письма. Так устроен IDMessage.

И вообще ради эксперимента сделай
Message.SaveToFile("c:\message.msg");
Message.LoadFromFile("c:\message.msg");
Message.SaveToFile("c:\message2.msg");

файлы message и message2 получатся разные! message2 больше!
А если сделать в цикле- Not free Space on volume c:
Message.SaveToFile("c:\message.msg");
Message.LoadFromFile("c:\message.msg");

Избавится от этого можно тоже минимальными переделками исходника


 
Progh   (2005-02-07 16:26) [2]

Чето я мало че понял...
 Помню что раньше данные код работал, почему он неработает сейчас, как сделать чтобы он работал ?


 
Progh   (2005-02-07 16:40) [3]

Весь яндекс облазил, и везде пишут, что для выдирания приложения из письма надо делать так :
       for j := 0 to idMessage.MessageParts.Count - 1 do
       begin
         if idMessage.MessageParts.Items[j] is TIdAttachment then
         begin
           fName := SaveToDir + (idMessage.MessageParts.Items[j] as TIdAttachment).FileName;
           CopyFile(pchar(idMessage.MessageParts.Items[j].StoredPathName), pchar(fName), false);
         end
       end;

Но у меня не разу не выполняется условие :  if idMessage.MessageParts.Items[j] is TIdAttachment then Хотя приложение в письме 100% есть, почему так ?


 
Progh   (2005-02-07 16:51) [4]

Кстати нераспознование приложение происходит, только когда я шлю письмо из своей программы, когда шлю посредством веб интерфейса яндекса, то приложение распознается,, шлю так :

function TMain.SendMail(_to, smtp, from, Subject, text, Attach: string): Boolean;
var
 m: TIdMessage;
 _Attach: TIdAttachment;
begin
 try
   idSMTP.Port := StrToInt(edtSMTPPort.Text);
   idSMTP.Host := edtSMTP.Text;

   idSMTP.Username := edtSMTPMail.Text;
   idSMTP.Password := edtSMTPMailPass.Text;

   m := TIdMessage.Create(nil);
   m.ContentType := "text/plain";
   m.CharSet := "windows-1251";
   m.Encoding := meMIME;
   m.ContentTransferEncoding := "quoted-printable";

   m.From.address := from;
   m.Recipients.EMailAddresses := from;
   m.Subject := Subject;
   m.Body.text := Text;

   if Attach <> "" then
     _Attach := TIdAttachment.Create(m.MessageParts, Attach);
   idSMTP.Connect();
   idSMTP.Send(m);
   idSMTP.Disconnect;
   Result := true;
 except
   if idSMTP.Connected then
     idSMTP.Disconnect;
   Result := false;
 end;
end;

В чем дело ?


 
Progh   (2005-02-09 14:40) [5]

Народ, ну помогите же, горю !


 
Progh   (2005-02-13 11:43) [6]

Нежели никто не занет ??


 
Eraser ©   (2005-02-13 16:34) [7]

Progh

Попробуй Indy 10 установить...


 
Progh   (2005-02-13 16:39) [8]

В цикле
for i := 0 to idMessage.MessageParts.Count-1 do

 idMessage.MessageParts.Items[i].ClassName всегда равно TidText. Почему ? Где же тогда аттач ? В яндексе же нормально показывает прикрепленный файл !


 
Progh   (2005-02-13 16:40) [9]


>  [7] Eraser ©   (13.02.05 16:34)


У меня и так 10-е стоят


 
имя   (2005-02-14 12:06) [10]

Удалено модератором


 
Zloy ©   (2005-03-30 15:06) [11]

Снова поднял эту тему, может кто подскажет. Последний код
TIdAttachment.Create(IdMessage1.MessageParts,MainForm.StaticText2.Caption);

удачно справляется с отсылкой файлов, если они находятся в каталогах где нет пробелов, и если файл не кириллицей написан, а как сделать чтобы он любой мой схватить, из любого пути


 
Zloy ©   (2005-03-30 17:40) [12]

Ну не уж то ни кто не может деально подсказать, как прикрепить любой файл из любой дирректории... я уже вест инет облазил, и нахожу только такой вариант, который описан выше


 
Slym ©   (2005-03-31 04:35) [13]

У тебя исходники перед глазами... Смотри где не фурычит


 
Zloy ©   (2005-03-31 14:16) [14]

Так все фуричит, но если файл находится где нить:
Document and setting\user\file.txt
То он кричит, что файл не найдет по такому пути, если путь c:\user\file.txt то нормально.
единственный вариант который я вижу, это при выборе файла, програ копирует его к себе в каталог, но все равно будет косяк если потом прога будет стоять по пути: program files\



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
1-1118069208
Эдик Дятлов
2005-06-06 18:46
2005.06.29
Сохранить запись, содержащую динамический массив, в файл


14-1117797762
Aldor
2005-06-03 15:22
2005.06.29
Автоматические телефонные сервисы


4-1115541375
psa247
2005-05-08 12:36
2005.06.29
RegOpenKey


1-1118132886
john_mag
2005-06-07 12:28
2005.06.29
ExcelApplication


3-1116325523
Mortal
2005-05-17 14:25
2005.06.29
ADO: Проблема с Datetime