【发布时间】:2013-07-23 15:48:52
【问题描述】:
我正在使用这个简单的代码发送电子邮件,它适用于大多数 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 中解决这个问题? 谢谢
【问题讨论】:
-
这是实际代码吗?我在您的
try..except块中看到语法错误。SMTP和MailMessages是什么类型的对象? -
您是否在某处添加了收件人?
-
我更正了真实代码。 SMTP 也是 TIdSMTP,MailMessages 是 TIdMessage。此代码适用于普通的 SMTP 服务器,但对于使用 SMTP AUTH 的服务器,它显示以下错误:错误:有效的 RCPT 命令必须在 DATA 之前,这意味着我们应该在发送电子邮件之前进行身份验证,而我不知道如何在发送之前进行身份验证: XE2 delphi中的D
-
让我再问一遍。您添加收件人吗? RCPT 不是关于身份验证,而是关于谁是您的电子邮件的收件人。当您不进行身份验证时,我不知道为什么在没有收件人的情况下接受电子邮件,但无论如何,如果没有收件人,您的电子邮件似乎是不完整的。
ReceiptRecipient不是收件人。它是已读通知(收据)的接收者,因此通常是发送者而不是接收者。 -
好吧,上面的评论可能并不完全正确。我读了一点,当您的身份验证不被接受时,可能会出现此错误。这可能是因为凭据不正确,也可能是因为您的 IP 被列入黑名单(如果您进行了很多试验,这可能会发生)。你可以检查here。在搜索您的错误消息时,我还发现了许多其他可能导致它的可能性,因此问题可能不在您的代码中。
标签: delphi email delphi-xe2