SendEmail与Indy组件(SendEmail with Indy components)

2019-06-25 16:56发布

我尝试发送电子邮件,但我有一个问题,但是,我在网上找到了这样的代码:

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;

但不过,我注意到很多错误,我很想念印第安纳波利斯的一个组成部分。 编译器错误:

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

我在这里先向您的帮助表示感谢

Answer 1:

从你的问题的代码为印第安纳波利斯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 := '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;


Answer 2:

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

你的程序样本是写INDY9,如果你使用INDY10不能编译。 你需要让adjustements。



文章来源: SendEmail with Indy components