私はリモートメールサーバに接続する必要があるときにphpmailerを使用して電子メールを送信しています。 テクニカルサポートからリモートサーバーとサーバーIPをバインドする必要があるという情報があります。 私は初めてソケットをつぶすのは初めてです。fsockopenをsocket_createとsocket_connectに置き換えてください。
残念ながらphpmailerのはfsocketopenを使用していますので、これは私がそれをどのように変化したかである:
//my replacement code
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$conn = socket_connect($socket, $host, $port);
if($conn) {
$this->smtp_conn = $socket;
} else {
throw new Exception("Failed to connect to server: ".socket_last_error($socket));
}
//original phpmailer code
/**
$this->smtp_conn = @fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
*/
をしかし、その変更後、私は警告を受ける:
警告:fputs():付属のリソースではありませんが有効なストリームリソース
警告:socket_get_status():指定されたリソースは有効なストリームではありません リソース
fsockopenから返されるリソースと互換性のあるリソースを作成するにはどうすればよいですか? var_dumpを使うと、2つの変数が両方ともソケットであることがわかります。しかし、私はまだsocket_createを使って作成されたリソースについて警告を受け取ります。
回答ありがとうございます。でも、テクニカルサポートに関するライブでは、リモートメールサーバーで私のIPをsocket_bindする必要があります。 stream_socket_clientを使用して、私はすでに接続を作成しています。または私は接続後にバインドできませんか?申し訳ありませんが多くの質問のために、私はネットワークの問題のマスターです。 –
クライアントに接続するときにIP上で「バインド」しないでください。バインディングは、リスニング接続を作成し、ローカルインターフェイス/アドレスにバインド()して着信接続を待機するためのものです。送信クライアント接続では、宛先ホスト(IP)とポートを指定し、遠端サービスに接続します。より多くの情報を示すエラーやログがありますか? – ddubs
SMTPメッセージを送信するのにこの "束縛"が必要ですか?それは意味をなさないか、ホストの技術サポートが間違っていますか? telnet接続の詳細: 450クライアントホストが拒否されました:ホスト名[213.134.162.98]を見つけられません 421 server.na.meエラー:タイムアウトを超過しました –