Здарово всем кто читает эту тему. Проблемка такая я пишу на delphi прогу которая раз в n минут посылает письмо с информацией мне на mail. Так как у многих стоит динамический ip. Всё уже сделал код написал но не могу заставить работать таймер... Кто знает помогите...Внизу перевожу лог того что есть... Code: implementation {$R *.dfm} function GetLocalIP: String; const WSVer = $101; var wsaData: TWSAData; P: PHostEnt; Buf: array [0..127] of Char; begin Result := ''; if WSAStartup(WSVer, wsaData) = 0 then begin if GetHostName(@Buf, 128) = 0 then begin P := GetHostByName(@Buf); if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^); end; WSACleanup; end; end; procedure TForm3.Timer1Timer(Sender: TObject); var msg:TIdMessage; a:string; begin IdSMTP1.AuthType := atDefault; IdSMTP1.Username:='!!!!!!!!!!!!!'; IdSMTP1.Password:='!!!!!!!!!!!!!!111'; IdSMTP1.Host:='smtp.mail.ru'; IdSMTP1.Connect(); begin a:=formatdatetime('hh:mm',now); msg:=TIdMessage.Create(self); Msg.Subject:='ip'; Msg.Recipients.EMailAddresses:='!!!!!!!!!!!'; Msg.From.Address:='!!!!!!!!!!!!!!; Msg.Body.Add(a+' время =))э') ; Msg.Date:=StrToDate('11.11.2008'); if IdSMTP1.Connected=True then IdSMTP1.Send(Msg); end; IdSMTP1.Disconnect; end; end. ps interval таймера 30000 типа 30 секунд..но надо сделать хотя бы 30 минут..у человека нет часто рвётся))
Можеш прокоментировать данный тобой исходник? чё то я не втыкаю что тут ты юзаеш так как и что это? label send;
Я просто переделал исходный код отсылки E-Mail. Не так сложно сообразить куда надо вставить этот код. процедуру с таймером вообще убери. на обработчик кнопки поставь этот код
если там есть окно оно будет зависать на время Sleep а вообще при инициализации таймера вставь timer1.Interval:=30000*60;
Всё хорошо но в это коде когда запускаю вылазиет ошибка. ps код Code: procedure TForm3.FormCreate(Sender: TObject); label send; var msg:TIdMessage; a:string; begin IdSMTP1.AuthType := atDefault; IdSMTP1.Username:='5465446'; IdSMTP1.Password:='6565566565'; IdSMTP1.Host:='smtp.mail.ru'; IdSMTP1.Connect(); begin a:=formatdatetime('hh:mm',now); msg:=TIdMessage.Create(self); Msg.Subject:='ip'; Msg.Recipients.EMailAddresses:='55665656'; Msg.From.Address:='556454'; Msg.Body.Add(a+'время '+GetLocalip+' айпишник') ; if IdSMTP1.Connected=True then IdSMTP1.Send(Msg); end; IdSMTP1.Disconnect; end; [COLOR=DarkRed]Sleep[/COLOR](30000) goto send; end; end; Где красным там ошибка. На слове sleep он не хочет работать пишет Code: [DCC Error] Unit3.pas(72): E2029 Declaration expected but identifier 'Sleep' found
application.processmessages против sleep не поможет) если уж со sleep то в отдельном потоке делать а если по таймеру, то лучше так: Code: with TIdSMTP.Create do begin AuthType := atDefault; Username:='5465446'; Password:='6565566565'; Host:='smtp.mail.ru'; Connect(); a:=formatdatetime('hh:mm',now); msg:=TIdMessage.Create(self); Msg.Subject:='ip'; Msg.Recipients.EMailAddresses:='55665656'; Msg.From.Address:='556454'; Msg.Body.Add(a+'время '+GetLocalip+' айпишник') ; if Connected=True then Send(Msg); Disconnect; Free; end;//with так как если idsmtp еще не завершил работу, а пошел новый заход таймера, была бы ошибка или не то, что ожидаешь, а тут старый удаляется, а новый создается NeXArmAor, sleep в SysUtils
Вот что подключено в моём проекте... Code: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, WinSock , Registry, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP, IdPOP3, IdMessage, IdCustomTCPServer, IdTCPServer, IdCmdTCPServer, IdSMTPServer, ExtCtrls;
тогда почему у него Sleep не пашет? ошибку он показал. юзай первую ветку это не связанно с самой функцией Sleep, а вот с этим зачем два begin
Без того beginа если его удалит будет вылазить ошибка в end; IdSMTP1.Disconnect; в этом месте. Если даже убрать его то ошибка остаётся Так ошибка не в слипе а в синтаксесе но где..там с ендами замудрил что то)
Вот разобрался с endami всё запустилось =) Code: procedure TForm3.FormCreate(Sender: TObject); label send; var msg:TIdMessage; a:string; begin IdSMTP1.AuthType := atDefault; IdSMTP1.Username:='5465446'; IdSMTP1.Password:='6565566565'; IdSMTP1.Host:='smtp.mail.ru'; IdSMTP1.Connect(); //этот begin не нужен убери его send: //ты метку убрал зачем a:=formatdatetime('hh:mm',now); msg:=TIdMessage.Create(self); Msg.Subject:='ip'; Msg.Recipients.EMailAddresses:='55665656'; Msg.From.Address:='556454'; Msg.Body.Add(a+'время '+GetLocalip+' айпишник') ; if IdSMTP1.Connected=True then IdSMTP1.Send(Msg); IdSMTP1.Disconnect; Sleep(30000) ; goto send; end; end. ps Маленький вопрос сколько и в чём измеряется время в delphi просто в таймере как я понел 1 сек = 1000 . А в слипе так же?
Мда =) после не многочисленных проверок)) Повторно отправить мейл он отказывается... первый раз всё отправляется при запуске но формы не видно...и потом так и висит де то...