2 Stimmen

Ersetzen Sie fsockopen durch socket_create und socket_connect

Ich verwende phpmailer zum Versenden von E-Mails und hatte einige Probleme mit dem Senden auf meinem Hosting, wenn ich eine Verbindung zu einem entfernten Mailserver herstellen muss. Der technische Support hat mir gesagt, dass ich die IP-Adresse meines Servers mit dem entfernten Server verbinden muss. Es ist das erste Mal, dass ich mich mit Sockets beschäftige.

Leider verwendet phpmailer fsocketopen, also habe ich es so geändert:

//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
 */

Aber nach dieser Änderung erhalte ich Warnungen:

  • Warning: fputs(): übergebene Ressource ist keine gültige Stream-Ressource

  • Warning: socket_get_status(): übergebene Ressource ist kein gültiger Stream Ressource

Wie kann ich eine Ressource erstellen, die mit der von fsockopen zurückgegebenen Ressource kompatibel ist? Mit var_dump sagt es, dass diese beiden Variablen beide Sockets sind. Aber ich bekomme immer noch Warnungen für Ressourcen, die mit socket_create erstellt wurden.

0voto

Derek Wright Punkte 1432

Sie benötigen eine Stream-Ressource zurück, keine Socket-Ressource. Versuchen Sie es mit der Funktion stream_socket_client().

$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port,
$errno,
$errstr,
$tval);

Sind Sie außerdem sicher, dass Ihr Hosting-Provider Ihnen erlaubt, ausgehende E-Mails direkt von Ihrem Server zu versenden? Manchmal stellen sie einen Relay-Mailserver zur Verfügung, den Sie für ausgehende E-Mails verwenden können.

0voto

Ivan Velichko Punkte 6133

Siehe 本答

Und Sie können auch fragen Sie mich für meine eigene Implementierung smtp-Klasse-Plugin für PHPMailer, die E-Mail von diffenet IPs an einem Computer senden kann. Siehe Kontakt in meinem Konto.

P.S. Entschuldigung für mein Englisch

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X