2011-03-16 3 views
1

SSL을 통해 Perl로 이메일을 보내려고합니다. 예제를 기반으로 한 가장 좋은 패키지는 Net :: SMTP :: SSL입니다. 이것은 표준 인 것처럼 보입니다. 불행하게도, 생성자는 항상 나를 위해 undef을 반환SSL을 통해 Perl로 이메일 보내기

내가 확인을 다시 확인했습니다
my $smtp = Net::SMTP::SSL->new('smtp.server.com', Port => 25, Debug => 1); 

하고, 다시 재 검증 본질적으로 같은 일을 .NET 응용 프로그램을 사용하여 서버 이름 및 포트 번호를. 모든게 잘. NET 응용 프로그램과 함께 작동합니다, 그래서 내가 왜 SMTP 서버에 연결하는 데 문제가 있어야하는지 어떤 이유도 보이지 않습니다.

모듈이 일종의 디버깅 정보를 제공하지만 $!이 비어있는 경우 매우 유용합니다. $smtp 변수가 정의되지 않은 이유에 대한 설명이 있습니까? 또는 생성자 호출에서 유용한 디버깅 정보를 찾을 수있는 방법이 있습니까?

편집 : 예, 포트 25가 SSL과 함께 사용하는 이상한 포트라는 것을 알고 있습니다. 이 포트가 선택된 이유는 모르겠지만이 포트는 사용 중입니다. 불행히도 저는 시간에 제약을받습니다. cpan 모듈을 디버깅하려고 시도하는 것보다 다른 기술로 이것을 쉽게 파악할 수 있습니다. 도움을 주신 모든 분들께 감사드립니다.

+1

'새로운 것'에 대한 호출이 무엇인지 살펴보십시오. – Ether

+0

@ 나머지 소스를 이해하는 데 어려움을 겪고 있습니다. 여러분이 상상할 수 있듯이 Perl을 완전히 유창하지는 않습니다. 당신이 완전한 대답으로 정교 할 수 있다면 그것은 나 자신과 미래에 비슷한 상황에 처한 다른 사람들에게 매우 도움이 될 것입니다. – Jake

+0

Crypt :: SSLEay 또는 IO :: Socket :: SSL을 설치 했습니까? – Alessandro

답변

3

Net::SMTP::SSL은 작업을 수행 할 때 Net::SMTP을 사용합니다. Net : SMTP의 new 하위에있는 source을 보면 많은 오류 조건에 대해 undef이 반환됩니다. 시작하려면 디버거에서이 함수 호출을 단계별로 실행하거나 코드 전체에 인쇄 문을 수동으로 뿌려서 부딪히기 전에 얼마나 멀리 떨어지는 지 확인할 수 있습니다.

또한 IO::Socket::SSL이 설치되어 있는지 확인하십시오. 이는 네트워크 작업에 사용됩니다. cpan 클라이언트를 사용하여 모듈을 설치했다면 rpm과 같은 다른 패키지 관리자가 종속성 체인을 망칠 수 있습니다.

나는 또한 이중 - 당신이 올바른 포트가 있는지 트리플 확인합니다 : 인터넷 : : SMTP는 :: SSL의 설명서를 말한다 : 때문에 인터넷 :: SMTP의 new 방법의 특성

를, 그것은이다 SMTPS 서비스에 기본 포트를 사용하도록 재정의되지 않습니다. 아마도 미래 버전은 그런 스마트하게 될 것입니다. 포트 465는 보통 당신이 원하는 것이고, 그것을 지정하는 것은 고통이 아닙니다.

+1

디버깅하는 유일한 방법은 소스로 가서 print 문을 삽입하는 것입니다. 어떤 종류의 바보가 SMTP 모듈을 설계 했습니까? :/ – Jake

+0

IO :: Socket :: SSL을 업그레이드해야 할 수도 있습니다. 나만의 Perl에서 나는 1.962 버전을 가지고 있었고 새로운 Net :: SMTP :: SSL에 의해'undef'가 반환되었습니다.IO :: Socket :: SSL을 1.998로 업그레이드하면 문제가 해결되었습니다. – Cozzamara