2012-04-12 3 views
13

PHPMailer를 사용하여 SMTP 및 gmail을 사용하여 전자 메일을 보내려고합니다. 정확한 스크립트는 다른 서버에서 작동하지만이 특정 호스팅 회사의 서버에서는 작동하지 않습니다.포트 465와 587이 PHP로 열려 있는지 어떻게 확인할 수 있습니까?

나는 phpinfo()을 확인하고는 allow_url_fopenon 것을 알려줍니다 나열된 fopen 같은 더 disabled_functions이 없습니다.

스크립트가 실패하고 그것은 나에게 말한다 중 하나

SMTP -> ERROR: Failed to connect to server: Connection timed out (110) 

또는 다른

SMTP Error: Could not authenticate. 

나는 그것을 연결할 수 있기 때문입니다 있으리라 믿고있어, 때문에 다른 서버와 다시 작품 인증 자격 증명이 정확합니다.

그래서 좀 더 일반적으로 묻습니다. PHP 나 jailshell을 사용할 수있는 방법이 있습니까? ssh 포트가 실제로 열려 있는지 확인하십시오.

답변

19

당신은 fsockopen와 개방/사용할 수있는 포트를 확인할 수 있습니다

$fp = fsockopen('127.0.0.1', 25, $errno, $errstr, 5); 
if (!$fp) { 
    // port is closed or blocked 
} else { 
    // port is open and available 
    fclose($fp); 
} 

... 5가 호출이 실패 할 때까지 초 제한 시간입니다.

이것은 아마도 호스팅 제공 업체가 아웃 바운드 소켓 및/또는 특정 포트에 연결하지 못하게하는 방화벽 문제 때문일 수 있습니다. 아웃 바운드 SMTP 포트를 차단하는 것은 매우 일반적인 보안 구성입니다. 이전에는 포트 25 만 차단되었지만 차단되는 SSL 변종이 점점 더 많아지고 있습니다.

대부분의 제공 업체 및 호스팅 업체는 스패머가 정크 메일을 릴레이하지 못하도록 자신의 SMTP 서버에만 연결할 수 있습니다.

+0

+1 레코드의 경우 이는 PHPMailer가 SMTP 서버에 연결하는 것과 동일한 방법입니다 (제한 시간 초과 및 재시도 제외). – webbiedave

+0

감사합니다. 포트가 열려 있더라도 때때로 중계가 불가능하다는 것을 알았습니다. PHP로 확인하는 방법은 없나요? – cwd

+0

@cwd : 적절한 SMTP 명령을 보내고'fsockopen '에 의해 반환 된 핸들에'fwrite'와'fread'를 사용하여 응답을 확인해야합니다. – netcoder