|
Вопрос # 1 829/ вопрос открыт / |
|
Здравствуйте!
Помогите разобратся.
Мне надо проверять почту,например каждый час.
Не пойму как сделать.
Приложение: Переключить в обычный режим- 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;
 |
Вопрос задал: 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]:
Всем спасибо
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|