Sneap: Problem mit Mail senden über SMTP

Hallo Leute,
ich hab das kleine Problem das ich wenn ich versuche eine Mail über meinen SMTP Server zu senden diese Mail nie ankommt, ich schätze der Fehler liegt am login. Hoffe das mir da vll jemand sagen kann was ich falsch mache.

So sieht mein Script aus:

  
$smtpServer = "****.****.de";  
$port = "25";  
$smtpUser="****";  
$smtpPass="*****";  
  
$timeout = "45";  
$newLine = "\r\n";  
// Mail Funktion #######################################  
if($_SERVER["REQUEST_METHOD"] == "POST"){  
  
  $to = $_POST['to'];  
  $from = $_POST['from'];  
  $subject = $_POST['sub'];  
  $message = $_POST['message'];  
  // Mail Funktion #######################################  
  
  $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);  
  fputs($smtpConnect, "HELO $smtpServer". $newLine);  
  fputs($smtpConnect, "USER $smtpUser". $newLine);  
  fputs($smtpConnect, "PASS $smtpPass". $newLine);  
  fputs($smtpConnect, "MAIL FROM: <$from>" . $newLine);  
  fputs($smtpConnect, "RCPT TO: <$to>" . $newLine);  
  fputs($smtpConnect, "DATA" . $newLine);  
  
  //construct headers  
  $headers = "MIME-Version: 1.0" . $newLine;  
  $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  
  
  //send mail  
  fputs($smtpConnect, "To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");  
  fclose($smtpConnect);  
}  

Danke euch schon mal fürs Helfen.

Mfg

  1. Moin Moin!

    Hallo Leute,
    ich hab das kleine Problem das ich wenn ich versuche eine Mail über meinen SMTP Server zu senden diese Mail nie ankommt, ich schätze der Fehler liegt am login. Hoffe das mir da vll jemand sagen kann was ich falsch mache.

    Einiges, siehe unten.

    So sieht mein Script aus:

    $smtpServer = "..de";
    $port = "25";
    $smtpUser="****";
    $smtpPass="*****";

    $timeout = "45";
    $newLine = "\r\n";
    // Mail Funktion #######################################
    if($_SERVER["REQUEST_METHOD"] == "POST"){

    $to = $_POST['to'];
      $from = $_POST['from'];
      $subject = $_POST['sub'];
      $message = $_POST['message'];
      // Mail Funktion #######################################

    $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);

    Fehlerprüfung fehlt.

    fputs($smtpConnect, "HELO $smtpServer". $newLine);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.

    fputs($smtpConnect, "USER $smtpUser". $newLine);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.

    fputs($smtpConnect, "PASS $smtpPass". $newLine);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.

    fputs($smtpConnect, "MAIL FROM: <$from>" . $newLine);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.
    Injection-Möglichkeit durch fehlende Prüfung der Daten vom Benutzer.

    fputs($smtpConnect, "RCPT TO: <$to>" . $newLine);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.
    Injection-Möglichkeit durch fehlende Prüfung der Daten vom Benutzer.

    fputs($smtpConnect, "DATA" . $newLine);

    //construct headers
      $headers = "MIME-Version: 1.0" . $newLine;
      $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;

    //send mail
      fputs($smtpConnect, "To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.
    Injection-Möglichkeit durch fehlende Prüfung der Daten vom Benutzer.

    fclose($smtpConnect);

    Fehlerprüfung fehlt.
    SMTP-Antwort wird nicht beachtet.

    SMTP-Abmeldung fehlt.

    }

      
    Alexander
    
    -- 
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    
    1. Hey,
      hab jetzt mal soweit wie ich wuste alles umgebaut nur leider weiß ich nciht wie ich auf die SMTP Fehler prüfe ich hab mir die mal als echo ausgegeben aber das sind dann nur Zahlen womit ich nix anfangen kann (im unteren Script wieder entfernt).

        
        $fp = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);  
        // Eingefügt um öffnen zu prüfen  
        if (!$fp) echo "$errstr ($errno)<br />\n";  
        
        $HELO = fputs($fp, "HELO $smtpServer". $newLine);  
        $USER = fputs($fp, "USER $smtpUser". $newLine);  
        $PASS = fputs($fp, "PASS $smtpPass". $newLine);  
        $FROM = fputs($fp, "MAIL FROM: <$from>" . $newLine);  
        $TO = fputs($fp, "RCPT TO: <$to>" . $newLine);  
        $DATA = fputs($fp, "DATA" . $newLine);  
        
        echo "$errstr ($errno)<br />\n";  
        
        //construct headers  
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  
        
        //send mail  
        fputs($fp, "To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");  
        
        //Eingefügt um Verbindung zu beenden  
        fputs($fp, "Connection: close\r\n\r\n");  
        fclose($fp);  
      
      
      1. Hallo,

        hab jetzt mal soweit wie ich wuste alles umgebaut nur leider weiß ich nciht wie ich auf die SMTP Fehler prüfe ich hab mir die mal als echo ausgegeben aber das sind dann nur Zahlen womit ich nix anfangen kann

        und warum versuchst Du dann, Mailversand zu Fuß zu erledigen?
        Willst Du eine Spamschleuder bauen?

        Fragende Grüße

        Vinzenz

        1. und warum versuchst Du dann, Mailversand zu Fuß zu erledigen?

          Wie kommst du auf zu Fuß :)

          Willst Du eine Spamschleuder bauen?

          Nein ein Newsletter Script womit ich einfach html Newsletter versenden kann.

          1. Hallo,

            und warum versuchst Du dann, Mailversand zu Fuß zu erledigen?
            Wie kommst du auf zu Fuß :)

            weil Du fsockopen() statt mail() oder einer fertigen Mailklasse verwendest.
            Weil Du offensichtlich nicht weißt, was die Antworten zu bedeuten haben, die der Mailserver Deinem Skript gibt. Weil Du auf diese Antworten gar nicht gezielt reagieren willst.

            Willst Du eine Spamschleuder bauen?
            Nein ein Newsletter Script womit ich einfach html Newsletter versenden kann.

            aha, und wiederum: von Hand zu Fuß. Macht das wirklich Spass?
            Warum ist die Absenderangabe *nicht* im Skript fest verdrahtet?

            Fragende Grüße

            Vinzenz

            1. weil Du fsockopen() statt mail() oder einer fertigen Mailklasse verwendest.
              Weil Du offensichtlich nicht weißt, was die Antworten zu bedeuten haben, die der Mailserver Deinem Skript gibt. Weil Du auf diese Antworten gar nicht gezielt reagieren willst.

              Ich würde ja gerne die mail() verwenden aber ich kann per Mail leider keine HTML Mails versenden, ist auf meinem Webspace nicht möglich und es wurde mir von meinem Space anbieter geraten eine SMTP Funktion zu nutzen.

              Ich schreibe meine Scripte lieber selber auch wenns mit Fehler verbunnden ist und etwas Zeit arbeit und hier und da einwenig fragen. Wenn ich was fertiges runterlade dann lerne ich ja auch nichts dabei.

              Ich würde ja gerne auf Antworten reagieren und dazu schau ich mir jetzt den anderen Post genauer an um auf die Server antworten eingehen zu können.

              aha, und wiederum: von Hand zu Fuß. Macht das wirklich Spass?
              Warum ist die Absenderangabe *nicht* im Skript fest verdrahtet?

                
              <td><input type='text' style="width:60%;" name="from" value="Info@***.de" /></td>  
              
              

              Das ganze ist so damit ich die Mail Adresse auch mal tauschen kann jenachdem was ich versende. Entweder News@***.de oder halt Info@***.de

              1. Moin Moin!

                Ich würde ja gerne die mail() verwenden aber ich kann per Mail leider keine HTML Mails versenden, ist auf meinem Webspace nicht möglich und es wurde mir von meinem Space anbieter geraten eine SMTP Funktion zu nutzen.

                Das dürfte weniger an der mail()-Funktion liegen als vielmehr daran, dass Du die Dokumentation nicht gelesen hast.

                Sollte Dein Provider tatsächlich Mails anhand ihres MIME-Types blockieren, solltest Du Dir vielleicht einen anderen Provider suchen. Der Wechsel auf SMTP, egal ob über selstgefrickelten Code oder über eine saubere Library, wird in dem Fall exakt gar nichts bringen.

                aha, und wiederum: von Hand zu Fuß. Macht das wirklich Spass?
                Warum ist die Absenderangabe *nicht* im Skript fest verdrahtet?

                <td><input type='text' style="width:60%;" name="from" value="Info@***.de" /></td>

                
                > Das ganze ist so damit ich die Mail Adresse auch mal tauschen kann jenachdem was ich versende. Entweder News@\*\*\*.de oder halt Info@\*\*\*.de  
                  
                Oh schön, dann bastel' ich mir zwanzig Fantastillionen POST-Requests mit from=angie\_moerkel@buntes-kanzleramt.de und mülle von Deinem Scheunentor-Server aus das Internet voll, praktischerweise auch noch auf Deine Kosten.  
                  
                Nicht wirklich. Ich jedenfalls nicht. Aber irgendjemand wird sich früher oder später finden.  
                  
                Wenn Du verschiedene Absender willst, dann bau Dir ein Array mit Absender-IDs und nimm From aus dem Array. Den Index in das Array kannst Du weiter per POST übertragen.  
                  
                Ähnliches gilt für To: Läßt Du zu, dass ein Benutzer das frei wählen kann, wird sich schnell ein Spammer einfinden, der das ausnutzt.  
                  
                Und übrigens: Um Mails von einer Anwendung aus los zu werden, solltest Du nicht Port 25 nutzen, sondern Port 587 des Mailservers Deines Providers. Es sei denn, Dein Provider dokumentiert ausdrücklich, dass Du Port 25 nutzen sollst.  
                  
                Der Port 25 ist für die Kommunikation zwischen Mailservern vorgesehen, dort gelten auf einem gut konfigurierten Mailserver sehr strenge Regeln. Wer sich an die Regeln nicht hält, wird schnell für einen Spammer gehalten.  
                  
                Port 587 ist für das Abgeben von E-Mails beim eigenen Provider zur weiteren Beförderung vorgesehen. Dort sitzt ebenfalls ein SMTP-Server, der aber (bei einem gut konfigurierten Server) nur den eigenen Kunden zugänglich ist. Ganz nebenbei werden die Mails so über die offiziellen Server des Providers transportiert, "abgesegnet" und sammeln so nicht so viele Spam-Verdacht-Punkte.  
                  
                Alexander
                
                -- 
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                
                1. 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");  
                    
                    fputs($fp, "HELO " . $smtpServer . "\r\n");  
                        if(fgets($fp, 256) == "250")  
                             die("HELO SMTP-Fehler: Fehler bei der Verbindung zum Host (<i>".$smtpServer."</i>)");  
                  		  
                    fputs($fp, "AUTH LOGIN\r\n");  
                        if(fgets($fp, 256) == "334")  
                           die("AUTH SMTP-Fehler: Fehler bei der Verbindung zum Host (<i>".$smtpServer."</i>)");  
                    
                    
                    fputs($fp, base64_encode($smtpUser) . "\r\n");  
                        if(fgets($fp, 256) == "334")  
                           die("SMTP-Fehler: Benutzername (<i>".$smtpUser."</i>) nicht akzeptiert");  
                    
                    fputs($fp, base64_encode($smtpPass) . "\r\n");  
                        if(fgets($fp, 256) == "235")  
                           die("SMTP-Fehler: Benutzername/Passwort nicht akzeptiert");  
                    
                    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");  
                  	  
                    fputs($fp, "RCPT TO: <$to>\r\n");  
                    
                    fputs($fp, "DATA\r\n");  
                    
                    if(fgets($fp, 256) == "354")  
                        die("DATA SMTP-Fehler: Daten&uuml;bertragung konnte nicht gestartet werden.");  
                    
                    //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");  
                     if(fgets($fp, 256) == "250")  
                        die("SMTP-Fehler: Email konnte nicht &uuml;bertragen werden");  
                    
                     fputs($fp, "QUIT\r\n");  
                     fclose($fp);  
                  // ######################################################  
                  
                  

                  PS: Mit der Absender Mail fest eintragen und so weiter hab ich mir zu Herzen genommen und werde es jetzt in den weitern Schritten berücksichtigen.

                  1. 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&uuml;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 &uuml;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".
                    
                    1. Also ich glaub ich geb es wirklick auf, hab mir jetzt ne fertiges Script gesucht und werd das einwenig so anpassen wie ich es gerne hätte.
                      Hab das Script hier genommen:
                      http://www.php-einfach.de/downloads_clanletter.php

                      Kann ja mal jemand was zu sagen was ihr davon haltet...

                      1. Moin Moin!

                        Kann ja mal jemand was zu sagen was ihr davon haltet...

                        Mal kurz drüber geschaut:

                        * in admin/verwalten.php ist eine kaputte E-Mail-Adressen-Prüfung drin
                        * in save.php nochmal
                        * admin/automails.php ist anfällig für SQL-Injections
                        * admin/write.php ebenso
                        * admin/verwalten.php ebenso
                        * User-Passworte stehen im Klartext in der Datenbank
                        * SMTP-Passwort wird lustig verschlüsselt, aber der Schlüssel und die Entschlüsselungsroutinen sind trivial zu finden. Und insbesondere wird kaum jemand den Schlüssel ändern. Nicht besser als Klartext.
                        * in admin/user.php wird eine nicht-numerische User-ID schlicht auf 0 geändert statt abzubrechen, und diese 0 geht dann in die SQL-Statements. Man hat also besser keinen User mit der ID 0.
                        * das HTML stammt aus der Zeit vor CSS
                        * archiv.php enthält "select *", das ist mindestens unsauber
                        * ebenso admin/automails.php
                        * function.inc.php hat keinen blassen Schimmer von Zeichensätzen abseits von ISO-8859-1
                        * function.inc.php enthält eine "geborgte" Library (ab Zeile 280), die ebenso wenig die Fähigkeiten des SMTP-Servers prüft wie Du. Auch fehlen oft Fehlerprüfungen bei I/O-Funktionen.

                        Was halte ich also davon?

                        Abstand, um einen ganz alten Forumsgag zu recyclen.

                        Alexander

                        --
                        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                        1. Was halte ich also davon?

                          Abstand, um einen ganz alten Forumsgag zu recyclen.

                          Hm... ok das klingt natürlich nicht gut kennt denn jemand vll ein vergleichbares freeware Script? Was natürlich den heutigen Anforderungen entspricht ;)

                2. Hallo,

                  Und übrigens: Um Mails von einer Anwendung aus los zu werden, solltest Du nicht Port 25 nutzen, sondern Port 587 des Mailservers Deines Providers. Es sei denn, Dein Provider dokumentiert ausdrücklich, dass Du Port 25 nutzen sollst.

                  mag sein, dass manche Server auf Port 587 einen zusätzlichen privilegierten SMTP-Zugang anbieten, aber mir ist der Sinn nicht klar. Wikipedia sagt:
                  "Email is submitted by a mail client (MUA, mail user agent) to a mail server (MSA, mail submission agent) using SMTP on TCP port 587. Most mailbox providers still allow submission on traditional port 25."

                  Das hört sich so an, als wolle man die MUAs mehr und mehr von Port 25 auf Port 587 "umlegen". Die Mail- und Webhosting-Provider behalten diese Information aber wohl überwiegend für sich; alle Services, die ich bisher kennenlernen durfte, geben in ihrer Dokumentation oder in ihrer Hilfe zum Einrichten der Mailclients den Port 25 für SMTP an. Und die gängigen MUAs setzen beim Einrichten eines neuen Mail-Accounts auch nach wie vor Port 25 als Default ein.

                  Der Port 25 ist für die Kommunikation zwischen Mailservern vorgesehen, dort gelten auf einem gut konfigurierten Mailserver sehr strenge Regeln. Wer sich an die Regeln nicht hält, wird schnell für einen Spammer gehalten.

                  Und durch Einliefern der Mails über einen anderen Port soll das nicht passieren? Darin sehe ich irgendwie keinen Sinn.

                  Port 587 ist für das Abgeben von E-Mails beim eigenen Provider zur weiteren Beförderung vorgesehen. Dort sitzt ebenfalls ein SMTP-Server, der aber (bei einem gut konfigurierten Server) nur den eigenen Kunden zugänglich ist. Ganz nebenbei werden die Mails so über die offiziellen Server des Providers transportiert, "abgesegnet" und sammeln so nicht so viele Spam-Verdacht-Punkte.

                  Über welchen Server ich die Mails einreiche, bestimme ich ja schon über den Hostnamen. Wenn ich sie auf Port 25 per SMTP-AUTH abgebe, laufen sie auch über "den offiziellen Server des Providers".

                  So long,
                   Martin

                  --
                  Okay, Alkohol ist keine Antwort.
                  Aber manchmal vergisst man beim Trinken wenigstens die Frage.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. Moin Moin!

                    Hallo,

                    Und übrigens: Um Mails von einer Anwendung aus los zu werden, solltest Du nicht Port 25 nutzen, sondern Port 587 des Mailservers Deines Providers. Es sei denn, Dein Provider dokumentiert ausdrücklich, dass Du Port 25 nutzen sollst.

                    mag sein, dass manche Server auf Port 587 einen zusätzlichen privilegierten SMTP-Zugang anbieten, aber mir ist der Sinn nicht klar.

                    25 für Mailverkehr zwischen (professionell betreuten) Mailservern, 587 für Einlieferungen durch Mail-Clients (eigener Kunden). Man kann so zwei Server in zwei verschiedenen Konfigurationen betreiben. Für einen gängigen DSL-Anbieter böte es sich an, Port 587 nur für Clients aus den eigenen IP-Bereich zu öffnen sowie Name/Passwort zu verlangen und mit der Kunden-DB abzugleichen. Port 25 dagegen wäre für den eigenen IP-Bereich verrammelt und würde z.B. auch andere bekannte DSL-IP-Bereiche abblocken. Außerdem würde der Server Relaying verweigern und massiv mit Blacklists oder Greylists arbeiten.

                    Das hört sich so an, als wolle man die MUAs mehr und mehr von Port 25 auf Port 587 "umlegen".

                    Ja.

                    Die Mail- und Webhosting-Provider behalten diese Information aber wohl überwiegend für sich; alle Services, die ich bisher kennenlernen durfte, geben in ihrer Dokumentation oder in ihrer Hilfe zum Einrichten der Mailclients den Port 25 für SMTP an.

                    Ja, das scheint sich noch nicht so wirklich rumgesprochen zu haben. Vermutlich liegt das aber eher daran, dass die Kunden alte Software einsetzen, die "schon immer" auf Port 25 gearbeitet hat, und dass die Kunden erwarten, dass Port 25 für sie offen ist.

                    Und die gängigen MUAs setzen beim Einrichten eines neuen Mail-Accounts auch nach wie vor Port 25 als Default ein.

                    Was wirklich schade ist. Sie sollten wenigstens vorher 587 probieren.

                    Der Port 25 ist für die Kommunikation zwischen Mailservern vorgesehen, dort gelten auf einem gut konfigurierten Mailserver sehr strenge Regeln. Wer sich an die Regeln nicht hält, wird schnell für einen Spammer gehalten.

                    Und durch Einliefern der Mails über einen anderen Port soll das nicht passieren? Darin sehe ich irgendwie keinen Sinn.

                    Es soll eine "Zweiklassengesellschaft" aufgebaut werden. Die Mailserver bilden eine priviligierte Klasse, der der Port 25 anderer Mailserver offen steht. Die andere Klasse sind die Mail-Clients, die sich via Port 587 an ihren Provider (und nur den) zu wenden haben. Port 25 bleibt ihnen verwehrt.

                    Auf diese Art wird Spamversand durch Zombie-PCs deutlich schwieriger. Am Port 587 soll der Provider nicht jeden beliebigen Absender akzeptieren, sondern nur die seiner eigenen Kunden. Auch könnte der Provider schon hier verhindern, dass Spam und Malware eingespeist werden.

                    Über welchen Server ich die Mails einreiche, bestimme ich ja schon über den Hostnamen. Wenn ich sie auf Port 25 per SMTP-AUTH abgebe, laufen sie auch über "den offiziellen Server des Providers".

                    Richtig. Aber die zwei Ports erlauben zwei Server mit sehr unterschiedlichem Verhalten. Port 25 nimmt nur Mails für eigene Kunden an, aber aus der ganzen Welt, verweigert Relaying, blockiert bekannte Spammer, usw. Passwort-Schutz funktioniert hier nicht wirklich, weil eben jeder Mailserver hier einliefern darf. Port 587 nimmt Mails für die ganze Welt an, aber nur von eigenen Kunden. Passwort-Schutz ist kein Problem, sondern quasi Mindestvoraussetzung. Ggf. wird die Mail noch um Antispam-Signaturen ergänzt.

                    Man kann auch beides auf einem Port laufen lassen, das macht die Konfiguration des Servers aber schwieriger, weil er zwischen eigenen Kunden und fremden Systemen unterscheiden und davon abhängig zwei völlig verschiedene Regelsätze benutzen muß.

                    Alexander

                    --
                    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                    1. Hi!

                      25 für Mailverkehr zwischen (professionell betreuten) Mailservern, 587 für Einlieferungen durch Mail-Clients (eigener Kunden). Man kann so zwei Server in zwei verschiedenen Konfigurationen betreiben. Für einen gängigen DSL-Anbieter böte es sich an, Port 587 nur für Clients aus den eigenen IP-Bereich zu öffnen sowie Name/Passwort zu verlangen und mit der Kunden-DB abzugleichen. Port 25 dagegen wäre für den eigenen IP-Bereich verrammelt und würde z.B. auch andere bekannte DSL-IP-Bereiche abblocken.

                      Für dieses Szenario braucht man aber nicht zwingend unterschiedliche Ports. Das kann man ja schon durch unterschiedliche Hostnamen lösen. Der MX-Eintrag zeigt auf den Server für externe Mails, die Kunden bekommen als SMTP-Server einen anderen genannt. Vermutlich will man ja sowieso die beiden Zuständigkeiten auf separaten Maschinen platzieren.

                      Eine weitere Möglichkeit wäre, eine Bindung an unterschiedliche Netzwerkinterfaces, wenn man doch nur einen Server betreiben will.

                      Das hört sich so an, als wolle man die MUAs mehr und mehr von Port 25 auf Port 587 "umlegen".
                      Ja.

                      Der wichtigere Punkt wird sein, dass auf Port 587 nur authentifizierte Anwender Post einliefern sollen, man dort also ohne Krücken wie POP-before-SMTP seine Mails sofort loswird.

                      Die Mail- und Webhosting-Provider behalten diese Information aber wohl überwiegend für sich; alle Services, die ich bisher kennenlernen durfte, geben in ihrer Dokumentation oder in ihrer Hilfe zum Einrichten der Mailclients den Port 25 für SMTP an.
                      Ja, das scheint sich noch nicht so wirklich rumgesprochen zu haben. Vermutlich liegt das aber eher daran, dass die Kunden alte Software einsetzen, die "schon immer" auf Port 25 gearbeitet hat, und dass die Kunden erwarten, dass Port 25 für sie offen ist.

                      Den eigenen Kunden Port 25 gänzlich zu verwehren, würde sicher ein Schuss ins eigene Knie werden, eben weil man sich damit mehr Supportanfragen aufhalst, als notwendig wäre, wenn vom Kunden eingesetzte Software nicht (mehr) mit Port 25 funktioniert.

                      Aber die zwei Ports erlauben zwei Server mit sehr unterschiedlichem Verhalten. [...]
                      Man kann auch beides auf einem Port laufen lassen, das macht die Konfiguration des Servers aber schwieriger, weil er zwischen eigenen Kunden und fremden Systemen unterscheiden und davon abhängig zwei völlig verschiedene Regelsätze benutzen muß.

                      Wenn die ganze Trennung aber sowieso nur ein Gedankenspiel ist, weil sie in der Praxis wegen unzulänglicher Software scheitert, was soll's dann? Und wie ernsthaft werden zwei Funktionen, die man auch aus Sicherheitsgründen auf unterschiedliche Softwareinstanzen leitet, auf einem Server betrieben?

                      Lo!

                    2. [latex]Mae  govannen![/latex]

                      25 für Mailverkehr zwischen (professionell betreuten) Mailservern, 587 für Einlieferungen durch Mail-Clients (eigener Kunden). Man kann so zwei Server in zwei verschiedenen Konfigurationen betreiben.

                      <Kopfschüttel /> In dieser Kombination wegen der allgemeinen und historischen Ver(breitung|wendung) von Port 25 komplett sinnlos. Professionelle Mailserver untereinander könnten genausogut auf Port 587 kommunizieren und Port 25 wie bisher für Kunden offenhalten, dann hätte man den gleichen Effekt ohne Nebenwirkungen. Denn für Mailserver-Betreiber dürfte es wesentlich einfacher sein, ihre Software auf den entsprchenden Port umzustellen, als dies von allen End-Usern zu "verlangen".

                      Cü,

                      Kai

                      --
                      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                      in Richtung "Mess up the Web".(suit)
                      SelfHTML-Forum-Stylesheet
                      1. Moin Moin!

                        [latex]Mae  govannen![/latex]

                        25 für Mailverkehr zwischen (professionell betreuten) Mailservern, 587 für Einlieferungen durch Mail-Clients (eigener Kunden). Man kann so zwei Server in zwei verschiedenen Konfigurationen betreiben.

                        <Kopfschüttel /> In dieser Kombination wegen der allgemeinen und historischen Ver(breitung|wendung) von Port 25 komplett sinnlos. Professionelle Mailserver untereinander könnten genausogut auf Port 587 kommunizieren und Port 25 wie bisher für Kunden offenhalten, dann hätte man den gleichen Effekt ohne Nebenwirkungen. Denn für Mailserver-Betreiber dürfte es wesentlich einfacher sein, ihre Software auf den entsprchenden Port umzustellen, als dies von allen End-Usern zu "verlangen".

                        Nur das müßte mehr oder weniger simultan passieren, sonst rennen die Mailserver, die von der Änderung noch nichts wissen, auf den dann als "nur für Kunden" umdefinierten Port 25 und scheitern dort am Login oder an IP-Beschränkungen.

                        Anders herum, nach und nach Kunden vom Port 25 wegschaffen und auf 587 zu verweisen, ist es einfacher. Dann betrifft das nämlich immer nur die Kunden, die an einem Mailserver hängen, und nicht das gesamte Internet.

                        Aktuell sieht es so aus, dass viele Provider auch noch Kunden auf Port 25 lassen, vermutlich genau wegen den dämlichen Defaults der Mail-Clients. Andererseits blockieren schon viele Dial-Up-Provider Traffic zum Port 25 des Kunden, um Wildwuchs von offenen Mailservern zu vermeiden. Und einer meiner Ex-Chefs ist im asiatischen Ausland auch schon daran gescheitert, dass der örtliche Provider überhaupt keinen Verkehr auf Port 25 aus seinem Netz herausgelassen hat. Port 587 zum Mailserver in DE war dagegen kein Problem.

                        Alexander

                        --
                        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                        1. [latex]Mae  govannen![/latex]

                          25 für Mailverkehr zwischen (professionell betreuten) Mailservern, 587 für Einlieferungen durch Mail-Clients (eigener Kunden). Man kann so zwei Server in zwei verschiedenen Konfigurationen betreiben.

                          <Kopfschüttel /> In dieser Kombination wegen der allgemeinen und historischen Ver(breitung|wendung) von Port 25 komplett sinnlos. Professionelle Mailserver untereinander könnten genausogut auf Port 587 kommunizieren und Port 25 wie bisher für Kunden offenhalten, dann hätte man den gleichen Effekt ohne Nebenwirkungen. Denn für Mailserver-Betreiber dürfte es wesentlich einfacher sein, ihre Software auf den entsprchenden Port umzustellen, als dies von allen End-Usern zu "verlangen".

                          Nur das müßte mehr oder weniger simultan passieren, sonst rennen die Mailserver, die von der Änderung noch nichts wissen, auf den dann als "nur für Kunden" umdefinierten Port 25 und scheitern dort am Login oder an IP-Beschränkungen.

                          Nicht, wenn man von Anfang an entsprechend sinnvoll geplant hätte. Irgendwann muß ja die Entscheidung, User auf 587 zu legen und 25 für die Mail-Server zu verwenden, gefallen sein. Da hätte genausogut beschlossen werden können "Innerhalb eines bestimmten Zeitraumes X (z.B. 1, 2, .. 5 Jahre) muß ein professioneller Mailserver auf 587 umgestellt werden, danach werden auf 25 entsprechende Restriktionen eingeschaltet". Fertig. Wer es innerhalb dieses Zeitraumes nicht geschaft hat, ist dann als Server halt irrelevant.

                          Aktuell sieht es so aus, dass viele Provider auch noch Kunden auf Port 25 lassen, vermutlich genau wegen den dämlichen Defaults der Mail-Clients.

                          Was ist daran dämlich? Dämlich ist vielmehr, einen bereits seit Jahrzehnten(!) bestehenden "Standard"-Port für alle Mail-Clients nun auf einmal zur Verwendung nur für professionelle Server umdefinieren zu wollen.

                          Cü,

                          Kai

                          --
                          Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
                          in Richtung "Mess up the Web".(suit)
                          SelfHTML-Forum-Stylesheet
      2. Moin Moin!

        Hey,
        hab jetzt mal soweit wie ich wuste alles umgebaut nur leider weiß ich nciht wie ich auf die SMTP Fehler prüfe ich hab mir die mal als echo ausgegeben aber das sind dann nur Zahlen womit ich nix anfangen kann (im unteren Script wieder entfernt).

        fputs() hat einen Rückgabewert, der in der PHP-Dokumentation dokumentiert ist.

        Weiterhin ist SMTP ein Dialog, kein Monolog. Der Server gibt Antworten, eine pro Kommando. Diese Antworten beginnen mit drei Ziffern, die für Maschinen vorgesehen sind, gefolgt von Text, der meistens ignoriert werden kann. Auf diese Antworten muß Dein Script reagieren. Die genaue Spezifikation von SMTP findest Du in den RFCs, beginnend beim ursprünglichem SMTP in RFC821, die zur Zeit letzte Fassung in RFC5321.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".