2012-04-12 16 views
13

SMTP ve gmail ile e-posta göndermek için PHPMailer kullanmaya çalışıyorum. Tam komut dosyası diğer sunucularda çalışır ancak bu belirli bir barındırma şirketinin sunucusunda çalışmıyor.465 ve 587 numaralı bağlantı noktalarının PHP ile açık olup olmadığını nasıl kontrol edebilirim?

Ben phpinfo() kontrol ettikten ve allow_url_fopenon olduğunu söylüyor ve listelenen fopen gibi hiçbir disabled_functions vardır.

komut başarısız olur ve bu beni anlatıyor ya:

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

veya başka

SMTP Error: Could not authenticate. 

Ben bağlanamadığı için bu olduğunu varsayarak yaşıyorum çünkü diğer sunucular ve tekrar bu iş kimlik doğrulama bilgileri doğrudur.

Daha genel olarak soruyorum, portları açık olup olmadığını kontrol etmek ve görmek için PHP veya jailshell ssh'u kullanabileceğim bir yol var mı?

cevap

19

Sen fsockopen açık/kullanılabilir bağlantı noktaları için kontrol edebilirsiniz:

$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 çağrı başarısız dek saniye cinsinden zaman aşımı olduğunu. Bu, büyük olasılıkla, barındırma sağlayıcınızın sizi giden yuvalara ve/veya belirli bağlantı noktalarına bağlamanızı engellediği bir güvenlik duvarı sorunundan kaynaklanıyordur. Giden SMTP bağlantı noktalarını engellemek için çok normal bir güvenlik yapılandırması olduğunu unutmayın. Gün içinde, yalnızca 25 numaralı bağlantı noktası engellendi, ancak daha fazla SSL varyantının da engellenmeye başladığını görüyorum.

Çoğu sağlayıcı ve barındırma şirketi, spam göndericilerin istenmeyen postaları iletmesini önlemek için yalnızca kendi SMTP sunucularına bağlanmanıza izin verecektir.

+0

+1 Kayıt için, bu aynı PHPMailer SMTP sunucusuna bağlanmak için kullandığı yöntemdir (daha uzun zaman aşımı ve yeniden denemeler dışında). – webbiedave

+0

Teşekkürler. Ayrıca liman açık olsa bile bazen geçiş devre dışı olduğunu öğrendim. Bunu PHP ile kontrol etmek için herhangi bir yol var mı? – cwd

+0

@cwd: Uygun SMTP komutlarını göndermeli ve 'fsockopen' tarafından döndürülen tutamaçta' fwrite' ve 'fread' kullanarak yanıtları kontrol etmelisiniz. – netcoder