我正在尝试发送电子邮件从smtps (安全smtp)使用印地和技术exaplined 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设置,而不是上面的设置,所有的工作
你能给我一个建议吗?
我将Indy 10.5.8和ssl dll放在与exe相同的路径中。
发布于 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。
发布于 2012-07-06 06:57:41
许多邮件服务器延迟接受连接,以防止邮件机器人通过尝试发送垃圾邮件来轰炸它们。
也许你看到的挂起只是连接中的长时间延迟,我以前在许多不同的服务器上使用过这些组件,连接总是会在出现错误时返回异常。如果是我,我现在会使用诸如wireshark之类的包嗅探器来检查发生了什么
https://stackoverflow.com/questions/11341944
复制相似问题