• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

SendEmail与Indy组件

windows 来源:Giacomo King Patermo 3次浏览

我尝试发送电子邮件,但我有一个问题,但是,我在网上找到了这段代码: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; 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)