Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.07.2009, 16:16
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию проверка почты на наличие новых писем

Задумка написать почтовый клиент, который не будет скачивать письма на компьютер для прочтения в целях безопасности, а лишь будет оповещать о получении нового письма с выводом информации об отправителе, с возможностью перейти на сайт, удалить и т.д. вот собственно наброски кода, перепробовал разные варианты, в чем я ошибаюсь?
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j: integer;
begin
timer1.Interval:=1000;
timer1.Enabled:=true;
 POP3.Host:='pop3.mail.ru'; 
 POP3.Port:=110;          
 POP3.Username:='ххх';
 POP3.Password:='******';  
 pop3.Connect;
 i:= pop3.CheckMessages;
 if i>j then begin
 showmessage('У вас новое сообщение!');
 end;
  j:=i;
pop3.Disconnect;

end;

Последний раз редактировалось Admin, 29.07.2009 в 22:10.
Ответить с цитированием
  #2  
Старый 19.07.2009, 21:36
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Гм... а задать интервал и состояние таймера не проще при создании формы? а лучше - в Object Explorer?
Имхо, у тебя начальное состояние таймера - false, и он никогда не включится.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 20.07.2009, 00:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,095
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Идея в принципе не совсем правильная. Хотя в большинстве случаев может и сработать. Кто сказал, что за время между проверками, пользоваталь не удалит часть писем? Это раз.
Два. Ни где, ни в каких RFC не сказано, что между подключениями к серверу он должен сохранять порядок писем.

Это так. Темы к размышлению
Ответить с цитированием
  #4  
Старый 20.07.2009, 10:00
Аватар для r1x
r1x r1x вне форума
Начинающий
 
Регистрация: 15.07.2009
Адрес: KZ, Pavlodar
Сообщения: 110
Репутация: 10
По умолчанию

по моему такое делать не правильно!!!Т.к. я уже делал почтовые клиенты и знаю этот код лажа.
Причина:
Конектится через каждую минуту к серваку это ппц будет грузить прогу (возможно зацикливание), ди потом где гарантия что он порграмма успеет приконектится к серверу и проверить почту за 1 сек? (Возможно веть такое что скорость нета маленькая).
.
Советую:
Конект сделать допустим на 1 кнопочку.
А в таймер запихать такое
Код:
if pop3.connected then 
 if pop3.checkmessage>0 then ShowMessage('ура почтальном печкин приехал ;)') else ShowMessage('Нету писем =(');
__________________
[ iNewStar.Ru ] - Продам!
Вопросы в ПМ
Ответить с цитированием
  #5  
Старый 20.07.2009, 16:20
Аватар для hkdkest
hkdkest hkdkest вне форума
Начинающий
 
Регистрация: 06.05.2008
Адрес: Рязань
Сообщения: 180
Репутация: 10
По умолчанию

timer1.Interval:=1000;

дык если каждую секунду проверять то забанят )
__________________
Делаю курсовые и лабораторные на Delphi, GPSS, Assembler, C++.
Заказать и почитать отзывы можно на сайте, который указан в этой теме
Дешево!
Ответить с цитированием
  #6  
Старый 20.07.2009, 17:45
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
if pop3.connected then
if pop3.checkmessage>0 then ShowMessage('ура почтальном печкин приехал ') else ShowMessage('Нету писем =(');

этот код тоже не верный, т.к. pop3.checkmessage больше нуля, если ящик не пустой, а наличие новых сообщение подтверждается сравниванием настоящего значения с предыдущим
Ответить с цитированием
  #7  
Старый 20.07.2009, 18:04
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию

все работает вот код. Объявил j, как глобальную переменную в отдельном юните, обнулил ее в FormCreate. не подскажите какова допустимая частота подключения к почтовому серверу, раз в минуту допустим или чаще можно???
Код:
 uses glob;
procedure TForm1.FormCreate(Sender: TObject);
begin
POP3.Host:='pop3.mail.ru'; 
 POP3.Port:=110;          
 POP3.Username:='p-pp'; 
 POP3.Password:='123456';   

 timer1.Interval:=10000;
 timer1.Enabled:=true;
 j:=0;
 end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
pop3.Connect;
i:= pop3.CheckMessages;
memo1.Lines.Add(inttostr(j)+' '+inttostr(i));
 if i>j then begin
 showmessage('У вас новое сообщение!');
 j:=i;
 end;
 pop3.Disconnect;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
pop3.Disconnect;
end;

Последний раз редактировалось Admin, 29.07.2009 в 22:10.
Ответить с цитированием
  #8  
Старый 21.07.2009, 22:02
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию

И так программа работает, если кому-то надо могу код выложить, осталось 2 вопроса:
(1) до первой проверки на наличие новых писем переменная j:=0, а значит если пришло письмо в момент, когда программа выключена, а затем я ее включил то сообщения о получении письма не будет, а если в сравнении убрать and (j<>0), то при первом включении всегда будет одно лишнее сообщение
Цитата:
pop3.Connect;
i:= pop3.CheckMessages;
if (i>j) and (j<>0) then begin
showmessage('У вас новое письмо!');
end;
j:=i;
pop3.Disconnect;

(2) программа письма на комп не скачивает, а значит нужна возможность по нажатии определенной кнопки перейти на почтовый сервер, так вот вопрос: как сделать так, чтобы поля логин и пароль брались из эдитов и шаг авторизации пропускался, т.е. мне надо сразу попасть во входящие на mail.ru например
Ответить с цитированием
  #9  
Старый 21.07.2009, 22:27
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1 - храни последнее значение в реестре...
2 - это уже можно поиграть с MRIM, используя автовход из агента... или (что проще) посмотреть HTML код формы входа, и от этого плясать...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #10  
Старый 21.07.2009, 23:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,095
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Мои 2 копейки.
По вопросу #2. А что тебе мешает получить письмо через тот же компонент и показать пользователю?
Ответить с цитированием
  #11  
Старый 22.07.2009, 15:13
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию

с первым разобрался либо файл, либо реестр, по поводу второго, тоже думал в сторону HTML, качать письма не хочу принципиально, в целях безопасности, т.к. если письмо с вирем попадает на комп, то это не есть гуд, да и спам многочисленный...
Ответить с цитированием
  #12  
Старый 22.07.2009, 16:05
bragol bragol вне форума
Прохожий
 
Регистрация: 25.03.2008
Сообщения: 14
Репутация: 10
По умолчанию

вот наткнулся на интересную статью по поводу авторизации
http://pblog.ru/?p=420
все прекрасно работает, но как сделать, чтоб по нажатии на кнопку открывалась скажем, страница входящие
Код:
procedure TForm5.btn1Click(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('Login=programmers');
params.Add('Domain=mail.ru');
params.Add('Password=1234');
responseres.Text:=http1.Post('http://win.mail.ru/cgi-bin/auth',params);
if Pos('logout',responseres.Text)>0 then
ShowMessage('Авторизовались!');
finally
params.free;
responseres.free;
end;
end;
метод ShellExecute(Application.Handle,'open','http://win.mail.ru/cgi-bin/start',nil,nil,0); приводит к зависанию программы.

Последний раз редактировалось Admin, 29.07.2009 в 22:11.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025