PHPMailerを使用してSMTPとGmailで電子メールを送信しようとしています。使用している正確なスクリプトは他のサーバーでは機能しますが、この特定のホスティング会社のサーバーでは機能しません。
phpinfo()
を確認しましたが、allow_url_fopen
はon
であり、fopen
のようなdisabled_functions
はリストされていません。
スクリプトが失敗し、次のいずれかが表示されます。
SMTP -> ERROR: Failed to connect to server: Connection timed out (110)
またはそうでなければ
SMTP Error: Could not authenticate.
これは接続できないためだと思います。これも他のサーバーで機能し、認証資格情報が正しいためです。
したがって、より一般的に質問します。PHPまたはjailshellssh
を使用して、ポートが実際に開いているかどうかを確認する方法はありますか?
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サーバーへの接続のみを許可します。