Moin Moin!
So hab mich jetzt einwenig durchgewühlt gelesen und so weiter und hab das ganze mal einwenig umgeschrieben und so funktioniert das ganze auch:
// Mail Funktion #######################################
$from = "@.de";
$to = "@.de";
$subject = "Newsletter";
$message = "Das ist <b>ein</b> test!";
if(!$fp = fsockopen($smtpServer, $port, $errno, $errstr, $timeout))
die("SMTP-Fehler: Verbindung zum Host (<i>".$smtpServer."</i>) fehlgeschalgen");
ok
fputs($fp, "HELO " . $smtpServer . "\r\n");
fputs hat einen Rückgabewert, den Du nicht prüfst.
Warum benutzt Du das alte HELO und nicht EHLO?
if(fgets($fp, 256) == "250")
die("HELO SMTP-Fehler: Fehler bei der Verbindung zum Host (<i>".$smtpServer."</i>)");
Das funktioniert nur mit einem sehr speziellen Server:
- SMTP-Antworten können aus mehr als einer Zeile bestehen.
- SMTP-Antworten bestehen nicht nur aus dem Statuscode.
- SMTP-Antwort-Zeilen können länger als 256 Zeichen sein.
Lies bitte mal die RFCs, wenn Du unbedingt einen SMTP-Client selbst zusammenfrickeln willst.
fputs($fp, "AUTH LOGIN\r\n");
Rückgabewert nicht geprüft.
Woher weißt Du, dass der SMTP-Server das AUTH-Kommando in dieser Form verarbeiten kann?
Du hast die Antwort auf HELO/EHLO nicht ausreichend überprüft, in der die Fähigkeiten des Servers angegeben sind.
if(fgets($fp, 256) == "334")
die("AUTH SMTP-Fehler: Fehler bei der Verbindung zum Host (<i>".$smtpServer."</i>)");
Antwort nicht ausreichend verarbeitet, s.o.
fputs($fp, base64_encode($smtpUser) . "\r\n");
Rückgabewert nicht geprüft.
if(fgets($fp, 256) == "334")
die("SMTP-Fehler: Benutzername (<i>".$smtpUser."</i>) nicht akzeptiert");
Antwort nicht ausreichend verarbeitet, s.o.
fputs($fp, base64_encode($smtpPass) . "\r\n");
if(fgets($fp, 256) == "235")
die("SMTP-Fehler: Benutzername/Passwort nicht akzeptiert");
Nochmal
fputs($fp, "MAIL FROM: <" . $from . ">\r\n");
if(fgets($fp, 256) == "250")
die("FROM SMTP-Fehler: Das Email-Konto (<i>".$from."</i>) exitsiert nicht auf dem Host");
Und nochmal
fputs($fp, "RCPT TO: <$to>\r\n");
Hier prüfst Du gar nichts mehr.
fputs($fp, "DATA\r\n");
Hier fehlt wieder die Rückgabewert-Prüfung.
if(fgets($fp, 256) == "354")
die("DATA SMTP-Fehler: Datenübertragung konnte nicht gestartet werden.");
Und diese Antwort-Prüfung reicht wieder nicht aus.
//construct headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
fputs($fp, "Subject: $subject\r\n");
fputs($fp, "To: $to\r\n");
fputs($fp, "$headers\r\n\r\n");
fputs($fp, "$message\r\n");
fputs($fp, ".\r\n");
Rückgabewerte ...
if(fgets($fp, 256) == "250")
die("SMTP-Fehler: Email konnte nicht übertragen werden");
Nicht ausreichend ...
fputs($fp, "QUIT\r\n");
Beides ...
fclose($fp);
// ######################################################
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".