【问题标题】:Problem sending an email via GMail with Indy SMTP client使用 Indy SMTP 客户端通过 GMail 发送电子邮件时出现问题
【发布时间】:2022-01-27 03:33:56
【问题描述】:

谁能告诉我我做错了什么(或没有做)?

这是我的程序代码:

procedure TForm20.SendImage(const Comment, AImage: String);
var
  SMTP: TIdSMTP;
  Msg: TIdMessage;
begin
  Msg := TIdMessage.Create(nil);
  try
    Msg.From.Address := 'frostydennis7@gmail.com';
    Msg.Recipients.EMailAddresses := 'trevosedennis@gmail.com';
    Msg.Body.Text := 'hello dennis';
    Msg.Subject := 'free space';

    SMTP := TIdSMTP.Create(nil);
    try
      SMTP.Host := 'smtp.gmail.com';
      SMTP.Port := 587;  
      //SMTP.Port := 465; //gives different error-connection closed gracefully but
      //no email is sent or received
         
      SMTP.AuthType := satDefault;
      SMTP.Username := 'frostydennis7@gmail.com';
      SMTP.Password := '$$$$$$$';

      SMTP.Connect;
      //fails with port 25- connection time out socket error
      //with port 465 it never gets past smtp connect.  shows 'closed graceflly'
      //with port 587 it gets past connect but then says
      //'must issue a STARTTLS command first' before smtp.send(msg)

      SMTP.Send(Msg);
    finally
      SMTP.Free;
    end;
  finally
    Msg.Free;
  end;
end;

【问题讨论】:

标签: delphi smtp gmail


【解决方案1】:

问题是您没有设置TIdSMTP.UseTLS 属性。

在端口 25 和 587 上,您必须将 UseTLS 设置为 utUseExplicitTLS,然后 TIdSMTP 将发出 STARTTLS 命令以在发送电子邮件之前启动 SSL/TLS 握手。

在端口 465 上,您必须将 UseTLS 设置为 utUseImplicitTLS,然后 TIdSMTP 将在连接后立即启动 SSL/TLS 握手,然后再读取服务器的问候语。

无论哪种方式,使用 SSL/TLS 都需要在连接到服务器之前将TIdSSLIOHandlerSocketBase 派生组件(例如TIdSSLIOHandlerSocketOpenSSL)分配给TIdSMTP.IOHandler 属性,例如:

var
  IO: TIdSSLIOHandlerSocketOpenSSL;
...
IO := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP);
IO.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
// configure other IO properties as needed...

SMTP.IOHandler := IO;

请注意,TIdSSLIOHandlerSocketOpenSSL 不支持 TLS 1.3+。目前,如果您需要使用 TLS 1.3+,请尝试使用this work-in-progress SSLIOHandler

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2014-01-04
    • 2011-10-28
    • 2017-05-12
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多