【问题标题】:Indy and smtps: cannot connectIndy 和 smtps:无法连接
【发布时间】:2012-07-05 09:58:08
【问题描述】:

我正在尝试使用 Indy 从 smtps(安全 smtp)发送电子邮件,该技术已解释为 in this Marco Cantù article

这是我正在使用的:

object SMTP: TIdSMTP
  IOHandler = IdSSLIOHandlerSocketOpenSSL1
  SASLMechanisms = <>
  UseTLS = utUseExplicitTLS
  Left = 32
  Top = 196
end

SMTP.Host := 'smtps.pec.aruba.it';;
        SMTP.Port := 465;;
        SMTP.Username := 'myaddress@pec.it';
        SMTP.Password := 'myPassw0rd'; 
        MailMessage.Encoding := meDefault;
        MailMessage.From.Address := 'myaddress@pec.it';

        MailMessage.BccList.EMailAddresses := 'testaddress0@gmail.com';
        MailMessage.Subject := 'Test Mail';
        MailMessage.Body.Text := 'Please ignore this mail, This is a test';

        SMTP.Connect; //failure!!!
        SMTP.Send(MailMessage);

我的程序在 SMTP.Connect 上挂起,但没有任何异常或有用的错误。

如果我使用 the article 中解释的 gmail 设置而不是 aboe,则所有工作

你能给个建议吗?

我有 Indy 10.5.8 和 ssl dll 在与 exe 相同的路径中。

【问题讨论】:

    标签: delphi delphi-xe2 indy indy10


    【解决方案1】:

    Connect() 挂起,因为您使用错误的 UseTLS 属性分配连接到错误的 Port

    端口 465 是 SMTP 的隐式 SSL 端口,这意味着客户端必须在连接到服务器后立即加密连接,然后才能进行任何与 SMTP 相关的通信。服务器希望您的客户端发送 SSL 握手,但您的客户端没有这样做,因为您设置了 UseTLS=utUseExplicitTLS。这告诉TIdSMTP 期望连接在连接到服务器时最初是未加密的,然后TIdSMTP 可以向服务器发送明确的STARTTLS 命令,以便在需要时动态激活 TLS 加密。

    因此,TIdSMTP 正在等待服务器发送 SMTP 问候语,但它从来没有发送过,服务器期待您的客户端发送 SSL 握手,但它从来没有发送过。直到其中一方断开连接才会发生死锁。

    如果连接到端口 465,则必须改为设置 UseTLS=utUseImplicitTLS。要使用UseTLS=utUseExplicitTLS,您需要连接到端口 25 或 587。

    【讨论】:

    • +1 谢谢,UseTLS=utUseImplicittTLS 提供帮助,现在连接已执行,甚至发送,但我没有收到电子邮件...您建议检查一下吗?
    • 如果服务器正确接收邮件数据(即Send() 没有引发异常),则服务器负责发送邮件。如果电子邮件没有到达,那么很可能在您与服务器断开连接很久之后,传送过程中的某个地方就失败了。诊断的唯一方法是检查您的收件箱以查看服务器是否正在向您发送错误消息。服务器接受后发生的传递错误不在您的 SMTP 会话范围内,这就是 TIdSMTP 无法向您报告的原因。
    • 我能够阅读传递失败的邮件,错误是“ccn not allowed”,因为必须有一个真实的(非 cc 或 ccn)收件人,所以我现在明确地使用收件人有用。非常感谢!
    【解决方案2】:

    许多邮件服务器延迟接受连接,以防止邮件程序机器人通过尝试投递垃圾邮件来轰炸它们。

    您看到的挂起可能只是连接中的长时间延迟,我之前曾在许多不同的服务器上使用过这些组件,并且连接总是会在错误时返回异常。如果是我,我现在会使用诸如 wireshark 之类的数据包嗅探器来检查发生了什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      相关资源
      最近更新 更多