印和SMTPS:无法连接(Indy and smtps: cannot connect)

2019-09-19 02:52发布

我想从SMTPS(安全SMTP)使用印和exaplined技术发送电子邮件的修改Marco坎文章 。

这是我在用的:

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,但没有任何异常或有用的错误。

相反,如果不是aboe我用gmail setings作为解释文章的所有作品

能否请您给的建议吗?

我有印10.5.8和为EXE相同的路径SSL的DLL。

Answer 1:

Connect()挂起,因为你正在连接到错误的Port与错误UseTLS属性赋值。

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

因此, TIdSMTP正在等待服务器发送SMTP问候,这不可能发生,并且服务器要求客户端发送一个SSL握手,这不可能发生。 发生死锁,直到其中一方断开。

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



Answer 2:

许多邮件服务器延迟连接的接受,以防止邮件机器人与尝试传送垃圾邮件轰炸他们。

这也许是挂你看到的是在连接只是一个较长时间的延迟,我已经使用这些组件之前,有许多不同的服务器和连接将始终返回一个错误异常。 如果是我,我现在会使用数据包嗅探器,如Wireshark的检查是怎么回事



文章来源: Indy and smtps: cannot connect