我尝试发送电子邮件,但是我有一个问题,但是,我在网上find了这个代码:
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 := 'username@gmail.com'; Msg.Subject := 'Test'; DestAddr := Msg.Recipients.Add; DestAddr.Text := 'name'; DestAddr.Address := 'username@yahoo.com'; Msg.Body.Add('simple test mail.'); tIdSMTP.Host := 'smtp.gmail.com'; tIdSMTP.Port := 25; tIdSMTP.AuthenticationType := atLogin; //error here (2 error) tIdSMTP.Username := 'username@gmail.com'; 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'
我在这里先向您的帮助表示感谢
从你的问题的代码是为Indy 9编写的,从编译器错误似乎你使用Indy 10.到你的编译器错误:
Undeclared identifier: Self
– Self
是指向类实例本身的指针,因为您没有将SendSimpleMail
作为类方法编写,而是作为独立程序使用,所以您没有任何Self
,因为您没有类。 你可以为例如TForm1.SendSimpleMail
这样的表单类编写类方法,在这个方法里面, Self
有TForm1
实例的含义,表单本身。
还有其他的错误是因为你正在访问TIdSMTP
类而不是对象实例。 常用的做法是声明一个局部变量,创建一个对象实例,将其分配给该变量,使用该对象(变量)并释放该对象实例。
我会尝试这样的事情(与德尔福2009年出货Indy 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 := 'username@gmail.com'; IdSMTP.Password := 'password'; IdSMTP.Connect; if IdSMTP.Authenticate then begin IdMessage := TIdMessage.Create(nil); try IdMessage.From.Name := 'User Name'; IdMessage.From.Address := 'username@gmail.com'; IdMessage.Subject := 'E-mail subject'; IdMessage.Body.Add('E-mail body.'); IdEmailAddressItem := IdMessage.Recipients.Add; IdEmailAddressItem.Address := 'recipient@email.com'; 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不能编译。 你需要进行调整。