如何修复 - 必须首先发出 STARTTLS 命令

问题描述 投票:0回答:1

注意 - 我在 Delphi 编码方面并不是非常有经验,并且对我正在尝试修复的这个主题知之甚少。

我的问题是,我正在尝试向用户发送一封包含“发货详细信息”的电子邮件,这是基于我的程序需求。

我的代码给我一个错误,如下所示:

procedure TForm1.FormCreate(Sender: TObject);
var
  smtp: TIdSMTP;
  msg: TIdMessage;
  sslHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  try
    smtp := TIdSMTP.Create(nil);
    msg := TIdMessage.Create(nil);
    sslHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      // Configure SSL handler
      sslHandler.SSLOptions.Method := sslvTLSv1_2;
      sslHandler.SSLOptions.Mode := sslmUnassigned;
      // Configure SMTP settings
      smtp.IOHandler := sslHandler;
      smtp.Host := 'smtp.gmail.com';
      smtp.Port := 587;
      smtp.Username := '';
      smtp.Password := '';

      // Create email message
      msg.From.Address := '';
      msg.Recipients.Add.Address := '';
      msg.Subject := 'Delphi Test Email';

      with TIdText.Create(msg.MessageParts, nil) do
      begin
        Body.Text := 'This is a test';
      end;
      // Connect and send email
      smtp.Connect;
      try
        smtp.Send(msg);
      finally
        smtp.Disconnect;
      end;
    finally
      // Clean up
      sslHandler.Free;
      msg.Free;
      smtp.Free;
    end;
  except
    on E: Exception do
      ShowMessage('An error occurred: ' + E.Message);
  end;
end;

我的表单上有相关组件,我的

uses
子句如下所示:

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdComponent, IdTCPConnection,
  IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
  IdBaseComponent, IdSMTP, IdMessage, IdText, IdSSLOpenSSL, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL;

我不知道如何修复这个错误。

注意:我显然已经输入了所需的所有空字符串值,并尝试设置自定义应用程序密码,但无济于事。错误仍然出现。

delphi compiler-errors smtp indy indy10
1个回答
0
投票

要使用

STARTTLS
命令,您需要在调用
TIdSMTP.UseTLS
之前将
utUseExplicitTLS
属性设置为
TIdSMTP.Connect()

© www.soinside.com 2019 - 2024. All rights reserved.