Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Ппоблема с idSMTP


Автор: a.S.d 25.2.2005, 16:31
У меня консольное приложение. Нужно отправить почту, используя компонент idSMTP. Но когда дело доходит до до использования компонента, прога вылетает. Вот код процедуры:
Код

procedure MailSend;
begin
idSMTP1.Host := 'smtp.mail.ru';
idsmtp1.Port := 25;
idmessage1.From.Text := 'mail@mail.ru';
idmessage1.Recipients.EMailAddresses := 'mail@mail.ru';
idmessage1.Subject := 'subject';
idmessage1.Body.Text := r;
tidattachment.Create(idmessage1.MessageParts,'log.txt');
tidattachment.Create(idmessage1.MessageParts,s);
idsmtp1.Connect(100000);
idsmtp1.Send(idmessage1);
idsmtp1.Disconnect;
end;

Если всё это сделать с формой и дописать перед каждым idSMTP1 и idmessage1
form1. , то всё работает.
В чём тут дело?

Автор: z-END 25.2.2005, 16:40
я чегото не вижу где у тебя этот самый idSMTP1 создается... или это кусок кода?

Автор: Snowy 25.2.2005, 16:43
idSMTP1:=TidSMTP1.Create();
у тебя вообще есть? Или ты его только в var'ах определил?

Автор: a.S.d 25.2.2005, 16:44
z-END
Да, действительно не создаётся. А как его создать?

Автор: z-END 25.2.2005, 16:46
Snowy уже написал:)

Автор: a.S.d 25.2.2005, 16:53
В начало процедуры вставил idsmtp1:=tidSMTP.Create(idsmtp1);
Тоже самое.

Автор: Snowy 25.2.2005, 17:16
Нет, в качестве параметра нужно передать хэндл какого-нить окна (обычно главное). Но для консольного это затруднительно. Попробуй в скобках просто дать nil.
И не забуть после использования или при выходе уничтожить объект:
IdSMTP.Free;

Автор: a.S.d 25.2.2005, 17:28
Snowy
При чём тут хэндл? tidSMTP.Create(AOwner:TComponent);
А с nil не работает.

Автор: z-END 25.2.2005, 17:32
ну тогда добавь в Uses Forms
и сздавай так: idsmtp1 := tidSMTP.Create (Application);

Автор: a.S.d 25.2.2005, 17:40
z-END
Так не годится, размер становится большой. Хотя если так сделать, всё равно не работает.

Автор: Snowy 25.2.2005, 17:44
Ну перепутал. Указатель на TComponent. Которого у тебя в консоли нет.
Вот, немного неполный твой код, который я доработал до рабочего состояния.
Проверил - работает.
nil подходит. Просто ты и IdMessage тоже не создал.
Код

program Project1;

{$APPTYPE CONSOLE}

uses
 IdSMTP,IdMessage;

var
 smtp: TIdSMTP;
 mes:  TIdMessage;

begin
 smtp:=TIdSMTP.Create(nil);
 mes:=TIdMessage.Create(smtp);
 smtp.Host := 'localhost';
 smtp.Port := 25;
 mes.From.Text := 'mail@mail.ru';
 mes.Recipients.EMailAddresses := 'mail@mail.ru'; // чуть не забыл адреса исправить на липовые :)
 mes.Subject := 'subject';
 mes.Body.Text := 'test';
 smtp.Connect(100000);
 smtp.Send(mes);
 smtp.Disconnect;
 mes.Free; smtp.Free;
end.

Но имей ввиду, что нужно еще ексепшены обрабатывать. Вдруг коннекта не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)