windows delphi email compiler-construction indy

windows - EnviarEmail con componentes de Indy



delphi compiler-construction (2)

Intento enviar un correo electrónico, pero tengo un problema, sin embargo, encontré este código en la web:

Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdMessage, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, IdBaseComponent, IdComponent, IdIOHandler, IdExplicitTLSClientServerBase, IdSMTPBase procedure SendSimpleMail; var Msg: TIdMessage; DestAddr: TIdEmailAddressItem; begin Msg := TIdMessage.Create(Self); //error here Msg.From.Text := ''name''; Msg.From.Address := ''[email protected]''; Msg.Subject := ''Test''; DestAddr := Msg.Recipients.Add; DestAddr.Text := ''name''; DestAddr.Address := ''[email protected]''; Msg.Body.Add(''simple test mail.''); tIdSMTP.Host := ''smtp.gmail.com''; tIdSMTP.Port := 25; tIdSMTP.AuthenticationType := atLogin; //error here (2 error) tIdSMTP.Username := ''[email protected]''; tIdSMTP.Password := ''password''; tIdSMTP.Connect; tIdSMTP.Authenticate; tIdSMTP.Send(Msg); tIdSMTP.Disconnect; end;

Pero, sin embargo, noté muchos errores y me falta un componente de Indy. Errores del compilador:

[DCC Error] Unit1.pas(36): E2003 Undeclared identifier: ''Self'' [DCC Error] Unit1.pas(46): E2233 Property ''Host'' inaccessible here [DCC Error] Unit1.pas(47): E2233 Property ''Port'' inaccessible here [DCC Error] Unit1.pas(48): E2003 Undeclared identifier: ''AuthenticationType'' [DCC Error] Unit1.pas(48): E2003 Undeclared identifier: ''atLogin'' [DCC Error] Unit1.pas(49): E2233 Property ''Username'' inaccessible here [DCC Error] Unit1.pas(50): E2233 Property ''Password'' inaccessible here [DCC Error] Unit1.pas(51): E2076 This form of method call only allowed for class methods [DCC Error] Unit1.pas(52): E2076 This form of method call only allowed for class methods [DCC Error] Unit1.pas(53): E2076 This form of method call only allowed for class methods [DCC Error] Unit1.pas(54): E2076 This form of method call only allowed for class methods [DCC Error] Project1.dpr(5): F2063 Could not compile used unit ''Unit1.pas''

Gracias por la ayuda por adelantado



El código de su pregunta está escrito para Indy 9 y de su error de compilación parece que está usando Indy 10. Para los errores de compilación:

  • Undeclared identifier: Self - the Self es el puntero a la instancia de la clase en sí y ya que no SendSimpleMail como método de clase, sino solo como un procedimiento independiente, no tienes ningún Self solo porque no tienes ningún clase. El método de clase podría escribir, por ejemplo, para su clase de formulario como, por ejemplo, TForm1.SendSimpleMail , donde dentro de ese método el Self tendría significado de la instancia de TForm1 , la forma misma.

  • Y el resto de los errores que recibió porque estaba accediendo a la clase TIdSMTP , no a la instancia del objeto. La práctica comúnmente utilizada es declarar una variable local, crear una instancia de objeto asignándola a esa variable, trabajar con ese objeto (variable) y liberar la instancia del objeto.

Intentaré algo como esto (probado con Indy 10 enviado con Delphi 2009):

uses IdSMTP, IdMessage, IdEMailAddress; procedure SendSimpleMail; var IdSMTP: TIdSMTP; IdMessage: TIdMessage; IdEmailAddressItem: TIdEmailAddressItem; begin IdSMTP := TIdSMTP.Create(nil); try IdSMTP.Host := ''smtp.gmail.com''; IdSMTP.Port := 25; IdSMTP.AuthType := satDefault; IdSMTP.Username := ''[email protected]''; IdSMTP.Password := ''password''; IdSMTP.Connect; if IdSMTP.Authenticate then begin IdMessage := TIdMessage.Create(nil); try IdMessage.From.Name := ''User Name''; IdMessage.From.Address := ''[email protected]''; IdMessage.Subject := ''E-mail subject''; IdMessage.Body.Add(''E-mail body.''); IdEmailAddressItem := IdMessage.Recipients.Add; IdEmailAddressItem.Address := ''[email protected]''; IdSMTP.Send(IdMessage); finally IdMessage.Free; end; end; IdSMTP.Disconnect; finally IdSMTP.Free; end; end;