首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Indy和smtps:无法连接

Indy和smtps:无法连接
EN

Stack Overflow用户
提问于 2012-07-05 17:58:09
回答 2查看 4.8K关注 0票数 2

我正在尝试发送电子邮件从smtps (安全smtp)使用印地和技术exaplined in this Marco Cantù article

这是我正在使用的:

代码语言:javascript
复制
object SMTP: TIdSMTP
  IOHandler = IdSSLIOHandlerSocketOpenSSL1
  SASLMechanisms = <>
  UseTLS = utUseExplicitTLS
  Left = 32
  Top = 196
end

代码语言:javascript
复制
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设置,而不是上面的设置,所有的工作

你能给我一个建议吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 07:21:44

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

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

因此,TIdSMTP正在等待服务器发送一个SMTP问候,而服务器希望您的客户端发送一个SSL握手,但它从未这样做过。在其中一方断开连接之前,会发生死锁。

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

票数 6
EN

Stack Overflow用户

发布于 2012-07-06 06:57:41

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11341944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档