Problem mit E-Mail-Versand via mail()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit E-Mail-Versand via mail()

    Guten Tag zusammen,

    ich habe ein Problem hinter das ich nicht so wirklich dahinterkomme.
    Ich habe mir ein Skript geschrieben, was aus einer Datenbank E-Mails ausliest. Während diese while-Schleife läuft soll er jedes mal an eine E-Mail Adresse (die der gerade ausgelesenen Position) eine E-Mail versenden.

    Habe dies bisher mit 1 und mit 2 Empfängern probiert.

    alle Inhalte in der mail() Funktion sind Inhalte einer HTML-E-Mail.
    In der E-Mail ist auch ein Stylesheet integriert.

    PHP-Code:
    $result  mysql_query("SELECT mail FROM adressen");
    while (
    $maildetails mysql_fetch_array($result)) {
      
    $to $maildetails[mail];
      
    /* Verschicken der Mail */
      
    mail($to$subject$message$headers);
      echo 
    "E-Mail an $maildetails[mail] erfolgreich versandt<br />";

    die echo-Ausgabe ist auch korrekt, er gibt jede E-Mail nur 1 mal aus mit nem simplen break dahinter.

    Nun das Problem:
    Das Skript versendet die E-Mail nicht 1 mal an dem jeweiligen Empfänger, sondern ~100 mal. Das witzige bzw. komische daran ist, das dies nicht immer geschieht, sondern wohl so wie ich das feststellen konnte bisher, nach Lust und Laune.
    Habe auch schon freemail Anbieter ausprobiert die erhalten auch die selbe Anzahl an Mails

    Wo könnte das Problem noch liegen? Hat da eventuell jemand schon die selbe Erfahrung gemacht? Freue mich auf jede Idee oder Anregung wo man noch suchen könnte.

    Greetz
    hasel

  • #2
    Hm, also soweit ich das überblicke müsste das so gehen. Aber was steht denn in Deinen headers drin für die Email? Vielleicht gibt es da ein Problem.

    Kommentar


    • #3
      kannst du mit 100%iger sicherheit sagen, dass das script nur einmal ausgeführt wird?

      Kommentar


      • #4
        @bitesser
        also im header steht folgendes:

        PHP-Code:
        $headers  "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

        /* zusätzliche Header */
        $headers .= "From: xxx@gmx.org\r\n"
        als Betreff ist Folgendes drinne

        PHP-Code:
        $subject "Irgendein Betreff halt"
        und als Inhalt ist halt eine aufgebaute Seite in html die Inhalte aus einer Datenbank dort reinpostet


        @TobiaZ

        PHP-Code:
        echo "E-Mail an $maildetails[mail] erfolgreich versandt<br />"
        nach diesem Befehl schreibt er mit die E-Mail-Adressen (die 2 die ich drin habe im Moment) untereinander hin

        sprich

        E-Mail1
        E-Mail2

        Würde das Skript mehrfach ausgeführt werden, müssten ja auch mehrfach die E-Mail-Adressen dort stehen oder?
        sprich eigentlich kann er dann, da das in einer while Schleife läuft die mail() Funktion auch nur 1 mal aufrufen.



        greetz

        Kommentar


        • #5
          Würde das Skript mehrfach ausgeführt werden, müssten ja auch mehrfach die E-Mail-Adressen dort stehen oder?
          Falsch! Würde das scipt mehrfach ausgeführt werden, würdest du von den ersten 99 mal nichts mitbekommen und nur das 100. mal sehen. oder nur das erste sehen und die restlichen 99 mal gar nicht mitbekommen.

          Kommentar


          • #6
            hmm .. stimmt, weil das Skript bzw. die datei in dem es liegt ja immer wieder neu laufen würde und ich ja nur die letzte Ausführung angezeigt bekomme

            Dann kann ich das nicht 100%ig sagen.
            Gibt es da ne Möglichkeit zu überprüfen wie oft das ausgeführt wird ?
            Oder eine Möglichkeit das ich das 100%ig erkennen kann...

            also bisher rufe ich das skript einfach im Webbrowser auf. Sprich ich geb einfach www.domain.de/skript.php ein und bekomme das dann dementsprechend angezeigt, bzw. die letzte Ausführung.

            schlimm das solche eigentlich einfachen Dinge immer so komplizierte Ausmaße annehmen

            Kommentar


            • #7
              das einfachste wäre, wenn du in die logdatei deines servers gucken würdest.

              ansonsten kannst du auch nen einfachen counter in das script einbauen.

              Kommentar


              • #8
                ach da fällt mir auch noch was ein
                also die 100 Mails kommen nicht direkt an
                sondern immer später, könnt da vllt die Lösung drin liegen ?

                ok ich werd mal die Logfiles durchstöbern, vllt finde ich da ja was dann

                inwiefern meinste das mit dem Counter ?

                Kommentar


                • #9
                  das ist das beste anzeichen dafür, dass da irgendwann noch ne ausführung stattfindet, von der du nichts weißt.

                  Counte = ganz normaler counter, der dir anzeigt, wie oft das script ausgeführt wurde. Wenn er das erste mal 123 anzeigt, beim nächsten mal aber mehr als 124 anzeigt, dann weißt du, dass da was nicht stimmt.

                  Kommentar


                  • #10
                    hmm ... irgendwie habe ich gerade mit dem Counter ein Problem
                    muss ich die Werte da nicht in der Datenbank einfach ablegen oder einfach die variable ? aber die ginge doch verloren wenn ich das skript nochmal aufrude ?

                    Sry, bin ein wenig durcheinander ^^
                    Vielleicht denke ich gerade ein wenig ZU kompliziert

                    Kommentar


                    • #11
                      Wenn du mit nem Counter überfordert bist, wäre ein fertiges script an dieser Stelle sicher das bessere

                      leg den wert ab, wo du willst. Mysql, Flatfile, ... Nur nicht als Var in dem Script selber. Das thema hatten wir ja bereits...

                      Kommentar


                      • #12
                        dann guck ich da mal, wo ich was finde ohne da noch nen fehler reinzuhauen, das wär mir dann doch was peinlich

                        habe jetzt das Skript ein wenig umgeschrieben

                        PHP-Code:
                        $result  mysql_query("SELECT mail FROM adressen"); 
                        $maildetails = array(); 
                        while (
                        $row mysql_fetch_array($result)) { 
                          
                        $maildetails[] = $row//Schreiben wir die Adressen in nen Extraarray. Eigentlich nicht nötig, aber es macht Spaß!


                        $maildetails_count count($maildetails); // Zählen wir mal die Einträge 
                        if($maildetails_count){ // Ist was drin, machen wir uns an den Mailversand 
                          
                        for($i=0$i<$maildetails_count;$i++){ 
                            if(!empty(
                        $maildetails[$i]['mail'])){ // Schauen wir mal, ob ne Mailadresse vorhanden ist 
                              
                        $to $maildetails[$i]['mail']; // Übertragen sie in die Variable 
                              
                        if(mail($to$subject$message$headers)){ // Verschicken wir die Mail und überprüfen dabei, ob der Versand erfolgreich war 
                                
                        echo 'E-Mail an '.$to.' erfolgreich versandt<br />'// Japp 
                              
                        } else { 
                                echo 
                        'E-Mailversand an '.$to.' fehlgeschlagen<br />'// Nope 
                              

                            } else {
                                echo 
                        "E-Mail nicht vorhanden!<br />";
                            }
                          } 

                        Habe auch noch den Namen der Datei umbenannt, um der Möglichkeit vorzubeugen das irgendwo nen Cronjob oder sowas läuft wovon ich nix weiß bzw. den ich ned finde

                        Und nu hoffe ich einfach mal

                        Kommentar

                        Lädt...
                        X