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.