Delphi 5使用Indy发送电子邮件

时间:2015-09-22 18:54:43

标签: email delphi indy

我试图在Delphi 5上使用Indy 10发送电子邮件,结果是它不想进行身份验证,因为它向我显示了" Nooo"信息。到目前为止,我在这里有这个代码(我从另一个Stack Overflow问题得到)。我不确定为什么它对我不起作用,因为它显然是为了另一个人...也许我错过了一些东西,我用我的两封实际邮件和当然的密码取代了senderemail和receiveremail

编辑

这就是我现在的位置,它弹出一个"必须首先发出STARTTLS命令。"但现在错误......我真的很困惑......

编辑2

所以我设法让它发挥作用,这是最终的结果。如果某些事情没有正确完成,请随时告诉我......我有一个访问冲突,直到我添加了" IdSMTP.Authenticate;"发送邮件之前的行!

procedure TForm1.Button3Click(Sender: TObject);
var
    IdSMTP: TIdSMTP;
    Email: TIdMessage;
    SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
    IdSMTP := TIdSMTP.Create(nil);
    SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Email := TIdMessage.Create(nil);
    try
        SSLHandler.MaxLineAction := maException;
        SSLHandler.SSLOptions.Method := sslvSSLv23;
        SSLHandler.SSLOptions.Mode := sslmUnassigned;
        SSLHandler.SSLOptions.VerifyMode := [];
        SSLHandler.SSLOptions.VerifyDepth := 0;

        IdSMTP.IOHandler := SSLHandler;
        IdSMTP.Host := 'smtp.gmail.com';
        IdSMTP.Port := 587;
        IdSMTP.Username := 'email@gmail.com';
        IdSMTP.Password := 'password';
        IdSMTP.UseTLS := utUseExplicitTLS;

        Email.From.Address := 'email@gmail.com';
        Email.Recipients.EmailAddresses := 'secondemail@gmail.com';
        Email.Subject := 'Test subject';
        Email.Body.Text := 'Test body';

        IdSMTP.Connect;
        if IdSMTP.Connected then
        begin
            IdSMTP.Authenticate;
            IdSMTP.Send(Email);
            IdSMTP.Disconnect;
        end;
    finally
        Email.Free;
        SSLHandler.Free;
        IdSMTP.Free;
    end;
end;

1 个答案:

答案 0 :(得分:1)

尝试使用此代码:

  IdSMTP := TIdSMTP.Create(nil);
  try
    IdSMTP.UseTLS := utNoTLSSupport;
    IdSMTP.Host := 'smtp.gmail.com';
    IdSMTP.Port := 25;
    IdSMTP.AuthType := satDefault;
    IdSMTP.Username := 'SenderEmail@gmail.com';
    IdSMTP.Password := 'Password';        

    IdMessage := TIdMessage.Create(nil);
    try
        IdMessage.From.Name := 'My Name';
        IdMessage.From.Address := 'SenderEmail@gmail.com';
        IdMessage.Subject := 'E-mail subject';
        IdMessage.Body.Add('E-mail body.');
        IdMessage.Recipients.EMailAddresses := 'ReceiverEmail@gmail.com';           
        IdMessage.ReceiptRecipient.Name := 'Name';

        if not IdSMTP.Connected then
          IdSMTP.Connect;

        IdSMTP.Send(IdMessage);

     finally
          IdMessage.Free;
          IdSMTP.Disconnect;
     end;

  finally
    IdSMTP.Free;
    IdSSLIOHandlerSocketOpenSSL1.Free;