Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизВопрос по INDY а точнее IdPOP3 Найти похожие ветки
← →
C@N © (2006-10-17 22:06) [0]Как узнать пришла ли новая почта мне на ящик???
← →
Орион © (2006-10-17 22:15) [1]function CheckForNewMessagesInMyMailBox(AServer, AUser, APassword: string): Boolean;
begin
//здесь твой код с использованием IdPOP3
end;
← →
Percent (2006-10-17 22:24) [2]Как узнать пришла ли новая почта мне на ящик???
Это очень сложный вопрос...
← →
C@N © (2006-10-18 09:17) [3]ну вот... издеваетесь((((
На сколько я в курсе, то у каждого сообщения есть свойство типа NEW,
как понять сообщение НЬЮ или OLD ????
← →
Percent (2006-10-18 09:42) [4]На сколько я в курсе, то у каждого сообщения есть свойство типа NEW
Я сомневаюсь, что ты в курсе...
Если в почтовом ящике есть сообщения, то ты их, обычно, закачиваешь. После чего ящик становится пустым. Как только ящик перестает быть пустым, это значит, что пришли новые сообщения.
Есть вариант, когда закачивается не все сообщение, а лишь его заголовок. Само же сообщение хранится на сервере. Для того, чтобы проверить, новое это сообщение, или нет, надо получить UIDL этого сообщения от сервера, потом покопаться в полученных сообщениях, и, если сообщения с таким же UIDL нет в полученных, то это сообщение - новое.
Но в таком случае возникают проблемы с удалением почты с локального компьютера. То есть, ты не имеешь права просто удалять сообщение с локального компьютера; если ты так сделаешь, программа, не обнаружив его локально, закачает его с сервера повторно; для корректной обработки удаления, необходимо после удаления где-то хранить информацию об этом событии, чтобы при очередном подключении к серверу, выполнить не закачку сообщения с сервера, а удалить его также и с сервера.
Но и это еще не все. Если почтовых сообщений у клиента много, например, несколько тысяч, а то и десятков тысяч сообщений, то процесс проверки почты может затянуться на довольно длительное время. Чтобы этого избежать, закачивать почту надо с конца очереди, т. е., последние пришедшие закачивать первыми; как только появится "старое" ссобщение, значит, все идущие за ним (0..MsgNo - 1) уже закачаны, и можно прерывать процесс закачки почты.
Но и тут есть подводные камни. Например, если предыдущая закачка аварийно оборвалась, то такой метод проверки, найдя первое сообщение локально, прервет закачку почты. А на сервере могут быть еще новые сообщения, до которых просто "не дошла очередь".
Поэтому следует применять дополнительные проверки...
То есть, это очень сложно. И ни капли издевки.
P.S. Я не знаю, поддерживает ли такую функциональность IdPOP3...
← →
umbra © (2006-10-18 10:14) [5]поддерживает
← →
C@N © (2006-10-18 10:17) [6]Хек!!!....
И как всетаки получить этот UIDL
Пишу програмацию...которая по типу MRA... и с ящика закачивать пока ничо не собираюсь...
← →
Percent (2006-10-18 10:29) [7]И как всетаки получить этот UIDL
Послать серверу команду
UIDL N
где N - порядковый номер сообщения.
В ответ сервер вернет UIDL.
← →
Percent (2006-10-18 10:38) [8]Посмотрел только что IdPOP3.
Там нет метода для получения UIDL"а, можно получить только заголовок.
Но в заголовке письма UIDL"a нет. IdMessage.MsgID - это, скорее всего, не то. Скорее всего, MsgID - это поле сообщения Message-ID, т.е., идентификатор письма в контексте отправителя, но не сервера. То есть, для MsgID не гарантируется уникальность в контексте отдельно взятого почтового ящика.
← →
Percent (2006-10-18 10:42) [9]которая по типу MRA
Это что за зверь?
← →
Dmitrij_K (2006-10-18 10:42) [10]
> Там нет метода для получения UIDL"а
Плохо искал.
код из idpop3.pasfunction TIdPOP3.UIDL(const ADest: TStrings; const AMsgNum: Integer = -1): Boolean;
Begin
if AMsgNum >= 0 then begin
Result:=SendCmd("UIDL "+IntToStr(AMsgNum))=wsOk; {Do not Localize}
if Result then
begin
ADest.Assign(LastCmdResult.Text);
end;
end
else begin
Result:=SendCmd("UIDL")=wsOk; {Do not Localize}
if Result then
begin
Capture(ADest);
end;
end;
End;//TIdPOP3.GetUIDL
← →
Percent (2006-10-18 10:58) [11]Плохо искал.
Да нет, искал хорошо, просто у меня Delphi 6, и в нем нет этого метода...
← →
Dmitrij_K (2006-10-18 11:00) [12]
> Да нет, искал хорошо, просто у меня Delphi 6, и в нем нет
> этого метода...
Тогда пользуйся
:)
← →
Percent (2006-10-18 11:07) [13]Тогда пользуйся
Спасибо, но у меня есть свое, не Indy...
function TRSPOP3.MessageUIDL(a_iMessageNo: integer): string;
var
iPos: integer;
sStr: string;
begin
SendCommand("UIDL " + IntToStr(a_iMessageNo));
sStr := ReceiveSingle;
if not CheckAnswer(sStr) then
raise ERSPOP3Exception.Create("UIDL query error: " + Result);
DeleteOKERR(sStr);
iPos := Pos(" ", sStr);
if (iPos = 0) then
ERSPOP3Exception.Create("Wrong UIDL answer: " + sStr);
Result := Copy(sStr, iPos + 1, MaxInt);
end;
← →
C@N © (2006-10-18 12:50) [14]MRA - MailRuAgent... эта фигня умеет сидеть в трее и палить почту, на новые сообщения)))
Попробую разобраться.....
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c