0

这是我的问题。我正在使用 Delphi 5 和 Indy 9。目前我也没有选择升级。我正在尝试通过 gmail 发送电子邮件,并且我将字符串硬编码为“smtp.google.com”,它工作得很好。但是,如果 smtp.host 从变量中获取主机名,则会失败并出现错误 11001,我无法弄清楚原因。我是使用 indy 的新手,所以我可能遗漏了一些愚蠢的东西,但我不明白为什么它可以接受字符串作为主机,但不能接受保存字符串的变量。(它必须是一个变量,因为我需要根据登录的用户传递不同的 SMTP 主机。这是代码:

procedure TFormEmail.SendSimpleMail(ToEmail, MyAttachment: string);
var
  Msg: TIdMessage;
  DestAddr: TIdEmailAddressItem;
  SMTP: TIdSMTP;
  SSLHandler : TidSSLIOHandlerSocket;
  Attachment: TIdAttachment;
  SMTPHost1 :string;
begin
  Msg := idMessage1;
  Msg.From.Text := EmailName(My_User);
  Msg.From.Address := EmailAddress(My_User);
  msg.Subject := 'Test';//email subject
  DestAddr := Msg.Recipients.Add;
  DestAddr.Text := '';//receiver's name (optional)
  DestAddr.Address := ToEmail;//where its going
  Msg.Body.Add(edtEmailBody.text); //email body
  SMTP := IdSMTP1;
  SMTP.IOHandler := idSSLIOHandlerSocket1;
  SMTPhost1 := SMTPHost(My_User);
  SMTPhost1 := 'smtp.google.com';  
  //SMTP.Host := SMTPhost1;  //<--FAILS
  SMTP.Host := 'smtp.google.com'; //<--SUCCEEDS
  SMTP.Port := SMTPPort(My_User);
  SMTP.AuthenticationType := atLogin; //error here (2 error)
  SMTP.Username := EmailAddress(My_User);
  SMTP.Password := SMTPPassword(My_User);
  If not empty(MyAttachment) then
    Attachment := TIdAttachment.Create(Msg.MessageParts, MyAttachment);//loads Att
  Try
    SMTP.Connect;
  except
    SMTP.Connect;//refire if exception (issue with INDY)
  end;
  if useSSL(My_User) then
    SMTP.SendCmd('STARTTLS');//load TLS 
  SMTP.Authenticate;
  SMTP.Send(Msg);
  SMTP.Disconnect;//disconnect from server
end;

我标记了一个失败的和一个成功的,但我不明白我做错了什么。任何帮助,将不胜感激

4

1 回答 1

0

看来您对一个问题有更多问题,我只能帮助您解决一个问题。

我对 Connect 也有同样的问题,我只是从 IdSSLOpenSSLHeaders 调用了 Load 方法。

尝试以下操作:

SMTP := IdSMTP1;
IdSSLOpenSSLHeaders.Load;
SMTP.IOHandler := idSSLIOHandlerSocket1;
于 2012-12-13T16:03:05.143 回答