SendEmail与Indy组件

我尝试发送电子邮件,但我有一个问题,但是,我在网上找到了这段代码:SendEmail与Indy组件

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;

但是但是,我注意到很多错误,我缺少一个组件Indy的。 编译器错误:

[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'

感谢您的帮助提前

回答:

从你的问题的代码为印第安纳波利斯9和您的编译器错误书面似乎你使用印10.为了你的编译器错误:

  • Undeclared identifier: Self - 的Self是指针类实例本身并且因为您没有将SendSimpleMail作为类方法编写,而只是作为独立程序使用,所以您没有任何Self,因为您没有任何类。您可以为例如您的表单类编写的类方法,例如TForm1.SendSimpleMail,在该方法中,Self将具有TForm1实例的含义,该形式本身。

  • 而你得到的其他错误是因为你正在访问TIdSMTP类,而不是对象实例。常用的做法是声明一个局部变量,创建一个将其分配给该变量的对象实例,使用该对象(变量)并释放该对象实例。

我会尝试这样的事情(使用附带德尔福2009年印第安纳波利斯10测试):

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;

回答:

对于谷歌的smtp,你需要使用TLS或SSL! http://support.google.com/mail/bin/answer.py?hl=en&answer=13287

您的程序示例是针对INDY9编写的,如果您使用INDY10则无法编译。 您需要进行调整。

以上是 SendEmail与Indy组件 的全部内容, 来源链接: utcz.com/qa/260448.html

回到顶部