| 
| 
 | Вопрос # 1 829/ вопрос открыт / | 
 |  Здравствуйте!Помогите разобратся.
 Мне надо проверять почту,например каждый час.
 Не пойму как сделать.
 Приложение:Переключить в обычный режим procedure TForm1.Timer1Timer(Sender: TObject);varPost: TListItem;i,e:integer;S:string;beginPOP.Server:='pop.rambler.ru';POP.UserName:='V';POP.Password:='Vit';POP.Open;tryfor I := 0 to POP.MessageCount - 1 do beginfor E := 0 to PostView.Items.Count - 1 do  beginS:=PostView.Items.Item[e].SubItems[2];if S = DateTimeToStr(Now) thenPOP.RetrieveHeader(i);Application.ProcessMessages;Post:=PostView.Items.Add;
|  |   Вопрос задал: Vit2 (статус: Посетитель)Вопрос отправлен: 20 августа 2008, 13:13
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Dron Здравствуйте, Vit2!Для примера я создал небольшую программу по образу и подобию вашей, но использовал компонент IdPOP3 из Indy. Адаптировать код под свою библиотеку вы сможете, скорее всего, без особых проблем - все компоненты работают приблизительно одинаково, только имеют разные названия свойств и методов. Данные о письмах выводятся в TListView со следующими столбцами: From, Subject, Size, ID (ViewStyle = vsReport). Проверку, было ли уже сообщение добавлено, я делаю по последней колонке - ID сообщения, который для каждого сообщения уникален и не меняется с течением времени. В прикреплённом файле весь проект, в приложении только код. Если будут какие вопросы - отвечу. Удачи!
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 Приложение:Переключить в обычный режим procedure TForm1.Button1Click(Sender: TObject);var Count,I,J,New: Word; LI: TListItem; Size: Integer; Msg: TIdMessage; ID: String;    Exists: Boolean;begin  POP.Host:='pop.server.ru';  POP.Username:='username';  POP.Password:='***';  POP.Connect;  Count:=POP.CheckMessages;  if Count > 0 then  begin    New:=0;    for I := 1 to Count do    begin      Size:=POP.RetrieveMsgSize(I);      Msg:=TIdMessage.Create(Self);      POP.RetrieveHeader(I,Msg);       ID:=Msg.MsgId;      try        Exists:=False;      for J := 0 to ListView1.Items.Count-1 do        if ListView1.Items[J].SubItems[2] = ID then        begin          Exists:=True;          Break        end      except      end;      if not(Exists) then      begin        LI:=ListView1.Items.Add;        LI.Caption:=Msg.From.Address;        LI.SubItems.Add(Msg.Subject);        LI.SubItems.Add(IntToStr(Size));        LI.SubItems.Add(Msg.MsgId);        Inc(New);      end;      Msg.Free;    end;    Label1.Caption:='Messages count: '+IntToStr(Count)+' (new: '+IntToStr(New)+')';  end  else    Label1.Caption:='No new messages';  POP.Disconnect;    end;
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 22 августа 2008, 14:18
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 14; последнее сообщение — 22 августа 2008, 16:15; участников в обсуждении: 4. 
|   | Feniks (статус: Бакалавр), 20 августа 2008, 13:18 [#1]:Что-то у вас код в Приложении обрезанный. А целый нельзя было вставить ? |  
|   | 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 (статус: Посетитель), 21 августа 2008, 13:37 [#3]:Кончились помощники |  
|   | Dron (статус: Студент), 21 августа 2008, 14:03 [#4]:Может вы конкретизируете задачу? Этот код не работает или что? С уважением. |  
|   | Vit2 (статус: Посетитель), 21 августа 2008, 14:41 [#5]:В этом коде идёт добвка уже существующего а мне надо чтобы дабовлялось только новое. |  
|   | Dron (статус: Студент), 21 августа 2008, 14:51 [#6]:Ну так сохраняйте где-нибудь часть этих параметров, которые добавляете через Append() и далее просматривайте, нет ли уже таких же загруженных. С уважением. |  
|   | Vit2 (статус: Посетитель), 21 августа 2008, 15:01 [#7]:А можно на примере? |  
|   | Dron (статус: Студент), 21 августа 2008, 15:57 [#8]:Можно, только скажите: 1) Что за объект POP? IdPOP3 из Indy не подошёл.
 2) PostView - это TListView? Если да, то какие в нём столбцы?
 С уважением. |  
|   | Vit2 (статус: Посетитель), 22 августа 2008, 10:48 [#9]:POP > clPop3 (Clever Internet Suite v 6.2) PostView > ListView
 Насчёт столбцов, я не понял.
 |  
|   | Dron (статус: Студент), 22 августа 2008, 11:08 [#10]:1. А что особенного в этом Clever Internet Suite? Чем компонент из Indy не устраивает? 2. ListView в режиме таблицы? Вы же в заголовке какие-то названия колонок прописали? Впрочем, по коду можно понять, что к чему.
 С уважением. |  
|   | Vit2 (статус: Посетитель), 22 августа 2008, 11:23 [#11]:Честно сказать я Indy не пробовал. |  
|   | Вадим К (статус: Академик), 22 августа 2008, 14:00 [#12]:Indy и почта - вещи немного не совместимые. пока работаешь с простыми письмами и в латинице - всё ок. как только хочешь чего то больше - сразу проблемы. Я использовал в свое время компоненты Synapse (на сайте есть  статья с маленьким описанием). С почтой они  работают на порядок лучше.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Dron (статус: Студент), 22 августа 2008, 14:20 [#13]:Vit2: Написал примерчик, см. мой ответ. 
 Что касается Indy и всех его недостатков - у меня просто нет большого желания устанавливать сейчас дополнительные библиотеки только для того, чтобы показать простой пример. Если человеку нравится эта библиотека - ради бога, никто не запрещает ей пользоваться.
 С уважением. |  
|   | Vit2 (статус: Посетитель), 22 августа 2008, 16:15 [#14]:Всем спасибо |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |