2012-07-05 2 views
2

Indy를 사용하여 smtps (secure smtp)에서 전자 메일을 보내려고하고 기술이 in this Marco Cantù article 인 것으로 보입니다.Indy 및 smtps : 연결할 수 없습니다.

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

SMTP.Host := 'smtps.pec.aruba.it';; 
     SMTP.Port := 465;; 
     SMTP.Username := '[email protected]'; 
     SMTP.Password := 'myPassw0rd'; 
     MailMessage.Encoding := meDefault; 
     MailMessage.From.Address := '[email protected]'; 

     MailMessage.BccList.EMailAddresses := '[email protected]'; 
     MailMessage.Subject := 'Test Mail'; 
     MailMessage.Body.Text := 'Please ignore this mail, This is a test'; 

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

나는 프로그램이 SMTP.Connect에 달려 있지만, 예외 또는 유용한 오류없이 :

이것은 내가 사용하고있는 것입니다.

만약 대신 aboe

는 당신이 조언을 주시겠습니까 작품 the article 모두에 설명 된대로 내가의 Gmail setings를 사용하는 것보다?

나는 인디 10.5.8을 가지고 있고 ssl dll은 exe와 같은 경로에있다.

답변

6

Connect() 중단에 무슨 일이 일어나고 있는지 확인하는 등 wireshark 같은 패킷 스니퍼를 사용하는 것입니다.

포트 465는 SMTP의 암시 적 SSL 포트입니다. 즉, SMTP 관련 통신이 이루어지기 전에 클라이언트가 서버에 연결되면 즉시 연결을 암호화해야 함을 의미합니다. 서버가 클라이언트가 SSL 핸드 셰이크를 보내길 원하지만 클라이언트가 UseTLS=utUseExplicitTLS을 설정 했으므로 클라이언트가 SSL 핸드 셰이크를 보내지 않을 것입니다. 즉, TIdSMTP은 서버에 연결할 때 처음에는 연결이 암호화되지 않은 것으로 예상하고, TIdSMTP은 서버에 명시적인 STARTTLS 명령을 보내어 필요할 때 동적으로 TLS 암호화를 활성화 할 수 있습니다.

따라서 TIdSMTP은 서버가 결코 수행하지 않는 SMTP 인사말을 보내길 기다리고 있으며 서버는 클라이언트가 절대로 수행하지 않는 SSL 핸드 셰이크를 보낼 것으로 예상합니다. 교착 상태는 당사자 중 하나가 연결 해제 될 때까지 발생합니다.

포트 465에 연결하는 경우 UseTLS=utUseImplicitTLS을 대신 설정해야합니다. UseTLS=utUseExplicitTLS을 사용하려면 대신 포트 25 또는 587에 연결해야합니다.

+0

+1 감사합니다. UseTLS = utUseImplicittTLS가 도움이되었습니다. 이제 연결이 실행되고 전송 되더라도 이메일을받지 못합니다 ... 확인할 항목이 있습니까? – LaBracca

+1

서버가 오류없이 전자 메일 데이터를 받으면 (즉,'Send()'가 예외를 발생시키지 않는다면), 서버는 전자 메일 배달에 대한 책임을집니다. 전자 메일이 도착하지 않으면 서버 연결이 끊어지면 오랜 시간 동안 배달이 실패합니다. 이를 진단하는 유일한 방법은받은 편지함에서 서버가 오류 메시지를 보내고 있는지 확인하는 것입니다. 서버가 수락 한 후에 발생하는 배달 오류는 SMTP 세션 외부에 있기 때문에 'TIdSMTP'는 그 메시지를 사용자에게보고 할 수 없습니다. –

+0

실제 (비 cc 또는 ccn)받는 사람이 있어야하므로 오류가 "ccn not allowed"인 배달 실패 메일을 읽을 수 있으므로받는 사람을 명시 적으로 사용하고 있으며 이제는 작동합니다. 많이 고맙다! – LaBracca

0

많은 메일 서버가 메일러 봇이 스팸 메일 배달 시도를 저지르는 것을 방지하기 위해 연결 수락을 지연합니다.

어쩌면 당신이보고있는 연결이 오래 지연되는 것일 수 있습니다. 이전에 이러한 구성 요소를 여러 서버에 사용했고 연결은 항상 오류에 대한 예외를 반환합니다. 그것은 나 였다면 난 지금 당신이 잘못된 UseTLS 속성 할당에 잘못된 Port에 연결되어 있기 때문에

관련 문제