Форум: "Сети";
Текущий архив: 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