3

我正在使用这个简单的代码发送电子邮件,它适用于大多数 SMTP 服务器,但适用于使用 RFC 2554 中定义的 SMTP AUTH 扩展的服务器。它显示此错误:

错误:有效的 RCPT 命令必须在 DATA 之前

这是代码:

    SMTP.Host := 'host.com';
  SMTP.Port := 25;
  SMTP.Username:= 'user@host.com';
  SMTP.Password:= 'pass';
  MailMessages.From.Address:='address@address.com';
  MailMessages.From.Name:= 'Ehsan';
  MailMessages.Subject :=  'Test';
  MailMessages.Body.Text := 'the body is going to test';
  MailMessages.ReceiptRecipient.Address := 'ehsan.hesam13@gmail.com';

  try
    try
     SMTP.Connect;
     SMTP.Authenticate;
     SMTP.Send(MailMessages);
    except on E:Exception do
      StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
    end;
  finally
    if SMTP.Connected then SMTP.Disconnect;
  end;
end;

我如何在 XE2 中解决这个问题?谢谢

4

2 回答 2

4

确保填写TIdMessage.RecipientsTIdMessage.CCListTIdMessage.BCCList属性。这些是TIdSMTP获取其 SMTPRCPT TO命令地址的属性。您不能在没有指定收件人的情况下发送电子邮件。您只填写TIdMessage.ReceiptRecipient属性,该属性仅用于指定收件人发送已读回执的返回地址,如果收件人支持已读收件人。

此外,您不需要Authenticate()手动调用。 Send()需要时在内部为您调用它。

于 2013-07-23T19:53:22.867 回答
1

谢谢大家,我已经填写了Recipients.EMailAddresses并且它有效:D这是正确的代码:

  SMTP.Host := 'host.com';
  SMTP.Port := 25;
  SMTP.Username:= 'user@host.com';
  SMTP.Password:= 'pass';
  MailMessages.From.Address:='address@address.com';
  MailMessages.From.Name:= 'Ehsan';
  MailMessages.Subject :=  'Test';
  MailMessages.Body.Text := 'the body is going to test';
  MailMessages.Recipients.EMailAddresses:='ehsan.hesam13@gmail.com';

  try
    try
     SMTP.Connect;
     SMTP.Authenticate;
     SMTP.Send(MailMessages);
    except on E:Exception do
      StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
    end;
  finally
    if SMTP.Connected then SMTP.Disconnect;
  end;
end;

再次感谢你。

于 2013-07-23T22:44:37.257 回答