Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 829

/ вопрос открыт /

Здравствуйте!
Помогите разобратся.
Мне надо проверять почту,например каждый час.
Не пойму как сделать.

Приложение:
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. var
  3. Post: TListItem;
  4. i,e:integer;
  5. S:string;
  6. begin
  7. POP.Server:='pop.rambler.ru';
  8. POP.UserName:='V';
  9. POP.Password:='Vit';
  10. POP.Open;
  11. try
  12. for I := 0 to POP.MessageCount - 1 do
  13. begin
  14. for E := 0 to PostView.Items.Count - 1 do
  15. begin
  16. S:=PostView.Items.Item[e].SubItems[2];
  17. if S = DateTimeToStr(Now) then
  18. POP.RetrieveHeader(i);
  19. Application.ProcessMessages;
  20. Post:=PostView.Items.Add;


Vit2 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Vit2 (статус: Посетитель)
Вопрос отправлен: 20 августа 2008, 13:13
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Vit2!
Для примера я создал небольшую программу по образу и подобию вашей, но использовал компонент IdPOP3 из Indy. Адаптировать код под свою библиотеку вы сможете, скорее всего, без особых проблем - все компоненты работают приблизительно одинаково, только имеют разные названия свойств и методов. Данные о письмах выводятся в TListView со следующими столбцами: From, Subject, Size, ID (ViewStyle = vsReport). Проверку, было ли уже сообщение добавлено, я делаю по последней колонке - ID сообщения, который для каждого сообщения уникален и не меняется с течением времени. В прикреплённом файле весь проект, в приложении только код. Если будут какие вопросы - отвечу. Удачи!
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var Count,I,J,New: Word; LI: TListItem; Size: Integer; Msg: TIdMessage; ID: String;
  3. Exists: Boolean;
  4. begin
  5. POP.Host:='pop.server.ru';
  6. POP.Username:='username';
  7. POP.Password:='***';
  8. POP.Connect;
  9. Count:=POP.CheckMessages;
  10. if Count > 0 then
  11. begin
  12. New:=0;
  13. for I := 1 to Count do
  14. begin
  15. Size:=POP.RetrieveMsgSize(I);
  16. Msg:=TIdMessage.Create(Self);
  17. POP.RetrieveHeader(I,Msg);
  18.  
  19. ID:=Msg.MsgId;
  20. try
  21. Exists:=False;
  22. for J := 0 to ListView1.Items.Count-1 do
  23. if ListView1.Items[J].SubItems[2] = ID then
  24. begin
  25. Exists:=True;
  26. Break
  27. end
  28. except
  29. end;
  30. if not(Exists) then
  31. begin
  32. LI:=ListView1.Items.Add;
  33. LI.Caption:=Msg.From.Address;
  34. LI.SubItems.Add(Msg.Subject);
  35. LI.SubItems.Add(IntToStr(Size));
  36. LI.SubItems.Add(Msg.MsgId);
  37. Inc(New);
  38. end;
  39. Msg.Free;
  40. end;
  41. Label1.Caption:='Messages count: '+IntToStr(Count)+' (new: '+IntToStr(New)+')';
  42. end
  43. else
  44. Label1.Caption:='No new messages';
  45. POP.Disconnect;
  46. end;


Ответ отправил: Dron (статус: Студент)
Время отправки: 22 августа 2008, 14:18
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 22 августа 2008, 16:15; участников в обсуждении: 4.
Feniks

Feniks (статус: Бакалавр), 20 августа 2008, 13:18 [#1]:

Что-то у вас код в Приложении обрезанный. А целый нельзя было вставить ?
Vit2

Vit2 (статус: Посетитель), 20 августа 2008, 17:31 [#2]:

procedure TForm1.Timer1Timer(Sender: TObject);
var
Post: TListItem;
i,e:integer;
S:string;
begin
POP.Server:='pop.rambler.ru';
POP.UserName:='V';
POP.Password:='Vit';
POP.Open;
try
for I := 0 to POP.MessageCount - 1 do
begin
for E := 0 to PostView.Items.Count - 1 do
begin
S:=PostView.Items.Item[e].SubItems[2];
if S = DateTimeToStr(Now) then
POP.RetrieveHeader(i);
Application.ProcessMessages;
Post:=PostView.Items.Add;
Post.Caption := IntToStr(i+1);
Post.SubItems.Append(POP.MailMessage.From);
Post.SubItems.Append(POP.MailMessage.Subject);
Post.SubItems.Append(DateTimeToStr(POP.MailMessage.Date));
Post.SubItems.Append(BytesToStr(POP.GetSize(i)));
Post.SubItems.Append(POP.MailMessage.ContentType);
Post.SubItems.Append(POP.GetUID(i));
end;
end;
except
end;
end;
Vit2

Vit2 (статус: Посетитель), 21 августа 2008, 13:37 [#3]:

Кончились помощники
Dron

Dron (статус: Студент), 21 августа 2008, 14:03 [#4]:

Может вы конкретизируете задачу? Этот код не работает или что?
С уважением.
Vit2

Vit2 (статус: Посетитель), 21 августа 2008, 14:41 [#5]:

В этом коде идёт добвка уже существующего а мне надо чтобы дабовлялось только новое.
Dron

Dron (статус: Студент), 21 августа 2008, 14:51 [#6]:

Ну так сохраняйте где-нибудь часть этих параметров, которые добавляете через Append() и далее просматривайте, нет ли уже таких же загруженных.
С уважением.
Vit2

Vit2 (статус: Посетитель), 21 августа 2008, 15:01 [#7]:

А можно на примере?
Dron

Dron (статус: Студент), 21 августа 2008, 15:57 [#8]:

Можно, только скажите:
1) Что за объект POP? IdPOP3 из Indy не подошёл.
2) PostView - это TListView? Если да, то какие в нём столбцы?
С уважением.
Vit2

Vit2 (статус: Посетитель), 22 августа 2008, 10:48 [#9]:

POP > clPop3 (Clever Internet Suite v 6.2)
PostView > ListView
Насчёт столбцов, я не понял.
Dron

Dron (статус: Студент), 22 августа 2008, 11:08 [#10]:

1. А что особенного в этом Clever Internet Suite? Чем компонент из Indy не устраивает?
2. ListView в режиме таблицы? Вы же в заголовке какие-то названия колонок прописали? Впрочем, по коду можно понять, что к чему.
С уважением.
Vit2

Vit2 (статус: Посетитель), 22 августа 2008, 11:23 [#11]:

Честно сказать я Indy не пробовал.
Вадим К

Вадим К (статус: Академик), 22 августа 2008, 14:00 [#12]:

Indy и почта - вещи немного не совместимые. пока работаешь с простыми письмами и в латинице - всё ок. как только хочешь чего то больше - сразу проблемы.
Я использовал в свое время компоненты Synapse (на сайте есть статья с маленьким описанием). С почтой они работают на порядок лучше.
Галочка "подтверждения прочтения" - вселенское зло.
Dron

Dron (статус: Студент), 22 августа 2008, 14:20 [#13]:

Vit2: Написал примерчик, см. мой ответ.

Что касается Indy и всех его недостатков - у меня просто нет большого желания устанавливать сейчас дополнительные библиотеки только для того, чтобы показать простой пример. Если человеку нравится эта библиотека - ради бога, никто не запрещает ей пользоваться.
С уважением.
Vit2

Vit2 (статус: Посетитель), 22 августа 2008, 16:15 [#14]:

Всем спасибо

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.02 сек.