Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
4-1115677350
ronyn
2005-05-10 02:22
2005.06.29
Как загрузить документ в программу автоматически при открытии док


14-1117988072
SergP
2005-06-05 20:14
2005.06.29
Компонент для ввода/редактирования данных, Посоветуйте.


4-1115131189
Misha aka Programmer
2005-05-03 18:39
2005.06.29
Проблема с окнами


4-1115384854
webpauk
2005-05-06 17:07
2005.06.29
Изменение имени программы


1-1118128230
Dmitrij_K
2005-06-07 11:10
2005.06.29
Модалиные формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский