Rundmail in steps per header: location

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

  • Rundmail in steps per header: location

    Hallo,

    - ich möchte eine reine txt mail per mail() an mehrere Empfänger versenden
    - die Inhalte sind z.T. personalisiert und kommen aus der db -> daher kein bcc
    - nach x mails soll die versendende Seite neu geladen werden, um den jeweils nächsten Schub zu versenden

    Momentan wird der erste Schwung auch an die ersten 3 Empfänger versendet, danach gehts aber nicht weiter. Später sollten es dann schon 50 Empfänger pro Schub sein -a ber es hakt halt.

    Vorab meine Vermutung zum Fehler:
    PHP-Code:
    if(is_int($ok_mail/$mail_limit)){header("Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail");    } 
    Quelltext zum Versenden des Rundschreibens

    PHP-Code:
    //nl  versenden-----------------
    if($nl_go and $reference=="newsletter" and $nl_subject and $nl_content){
        
    $sender_mail="info@email.de";
        
    $header=
                
    "From: $sender_mail\n" 
                
    "Return-Path: $sender_mail\n" .             
                
    "Reply-To: $sender_mail\n" 
                
    "Sender: $sender_mail\n" 
                
    "MIME-Version: 1.0\n" .
                
    "Content-type: text/plain; charset=iso-8859-1\n";
        
    $subject=$nl_subject;
        if(!
    $ok_mail)$ok_mail=0//counter
        
    $mail_limit=3// max. emails je load
        
        
    $query=mysql_query("select * from $reciever where email_a!='' and active='1' limit $ok_mail,$mail_limit");
        while (
    $row=mysql_fetch_array($query)) {
            
    $name_a=""$anrede_a=""$message_intro="\nSehr geehrte Damen und Herren,\n\n";
            
    $cust_title=($row["title"]); stripslashes($cust_title);
            
    $anrede_a=($row["anrede_a"]);
            
    $name_a=($row["name_a"]); stripslashes($name_a);
            
    $tomail=($row["email_a"]);
            
            if(isset(
    $name_a) and $anrede_a == "Herr"){$message_intro="\nSehr geehrter Herr $name_a,\n\n";}
            if(isset(
    $name_a) and $anrede_a == "Frau"){$message_intro="\nSehr geehrte Frau $name_a,\n\n";}
            
            
    $message_intro.= $cust_title " wurde mit einem kostenlosen Eintrag auf Domain gelistet. \n\n";
            
    $message_body=$nl_content;
            
            
    $message=$message_intro $message_body$message=stripslashes($message);
            if(
    mail($tomail$subject$message$header)){
                
    $ok_mail++;            
                
    #echo "An $tomail - $subject<br>$message<br><br>";            
                
    if(is_int($ok_mail/$mail_limit)){header("Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail");    }            
            }else{
                echo 
    'E-Mailversand an ' $tomail ' fehlgeschlagen<br />'
            }                        
        }
        
    $result4ok_mail"<br>" $ok_mail " Newsletter versendet";    

    Über die Suche habe ich nix gefunden, übersehen, unfähig, ausredegesucht
    Und ist man alt wie ein Kuh, lernt man immer noch dazu.
    THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

  • #2
    Was sagt
    PHP-Code:
    error_reporting(E_ALL); 
    am Anfang deines Scriptes? Irgendwelche Fehlerausgaben ? Könnte mir nach kurzem Lesen des Codes vorstellen, dass du Probleme mit register_globals haben könntest.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      @tobi

      Danke für Deinen Tip.
      PHP-Code:
      error_reporting(E_ALL); 
      warf bereits auf meiner vormittäglichen Fehlersuche zwei undefinierte Variablen aus, die jedoch für den Ablauf des Skriptes nicht von Belang sind und nur Bienerfehler bei einem Speichervorgang abfangen sollen.

      Dennoch Danke und Gruß zurück
      Und ist man alt wie ein Kuh, lernt man immer noch dazu.
      THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

      Kommentar


      • #4
        Willst du denn, dass nach jedem header() die Seite wieder mit dem $ok_mail = 0 beginnt ?

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Ganz klares Nein.

          $ok_mail arbeitet als counter reell versendeter mails und nach dem Neuladen für das limit der db query fungieren.

          $ok_mail wird nur beim ersten Laden der Seite auf 0 gesetzt. Danach wird $ok_mail über den header übermittelt und kann weiter hochgezählt werden.

          $ok_mail schafft weiterhin den Abgleich zu den insgesamt versendenden mails.

          Ich gebe zu, dass meine Lösung sicher kein Geniestreich ist.
          Und ist man alt wie ein Kuh, lernt man immer noch dazu.
          THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

          Kommentar


          • #6
            $ok_mail wird nur beim ersten Laden der Seite auf 0 gesetzt. Danach wird $ok_mail über den header übermittelt und kann weiter hochgezählt werden.
            Das glaube ich nicht Tim Du greifst via $ok_mail auf die Var zu. Das mag gehen, kann aber je nach Serverkonf auch in die Hosen gehen.
            Die Var wird in der URL übergeben, ist also eine GET Var. Und auf GET/POST Vars solltest du mit $_GET/$_POST['varname'] zugreifen. Wie gesagt ich weiss nicht wie dein Server konfiguriert ist, aber deine Version funzt nur wenn register_globals auf on sind und das ist eine Sicherheitslücke.

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              sooo...

              nenenene... dann müssten ja zumindest immer wieder die selben mails verschickt werden, aber wenn er nur den ersten lauf macht, dann wird wahrscheinlich der header gar nicht geschickt.

              however.. zum debuggen folgendes:

              PHP-Code:
              if(is_int($ok_mail/$mail_limit)){header("Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail");    } 
              ändern in

              PHP-Code:

              if(is_int($ok_mail/$mail_limit)){header("Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail");
              echo 
              "header wurde gesendet:  Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail";   } 
              falls keine ausgabe, wird der block nicht ausgeführt.. dann liegt es wahrscheinlich an dem is_int...

              das witzige an is_int ist, dass es tatsächlich auf den datentyp prüft.

              is_int("1") ist also false, denn "1" ist ein String (der sich zwar als int interpretieren lässt, aber das ist mal unerheblich.

              auch wird mit hoher wahrscheinlichkeit $ok_mail/$mail_limit kein INT sein, sondern eher n float (real oder double), also kommazahl

              wenn du prüfen willst, ob $ok_mail/$mail_limit ganzzahlig ist (unabhängig vom datentyp), dann mach das so:

              PHP-Code:

              if ( ($ok_mail $mail_limit) == 
              also modulo (rest bei ganzzahliger division)

              hoffe, irgendwas davon hilft weiter,

              greetz, high


              Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
              When everything else fails, manipulate the data...
              Beschriftungen / Großformatdruck / Werbemittel

              Kommentar


              • #8
                PHP-Code:
                if(is_int($ok_mail/$mail_limit)){header("Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail");
                echo 
                "header wurde gesendet:  Location: $PHP_SELF?infoid=$infoid&ok_mail=$ok_mail";   } 
                Und wo soll dein echo ausgegeben werden ? In der Datei, in der du dich gar nicht mehr befindest, weil der header() schon gesendet wurde. Oder in der neuen Datei, die aber gar nichts von diesem echo wissen kann ?
                Alles was nach dem header() kommt wird eh nicht mehr ausgeführt und wenn doch, dann klappt die ganze header() Sache nicht.
                Drum nach Absetzen eines header(Location) immer ein exit.

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  <--- sagt jetzt gar nix mehr..

                  dann eben anstatt des headers.. nur die ausgabe.. ich wollte nur wissen, ob der block angefahren wird...

                  however...

                  @Husti... tut mir ganz furchbar leid, aber wenn ich hier von so einem Code-Gott zugeflamed werde, dann wird er dir sicher alles gerne erklären...

                  @jahlives
                  Viel Spaß, ich halte mich raus... wenn du dich so nett vordrängelst, dann bitteschöm.. ich habe nur versucht zu helfen, aber anscheinend bin ich zu blöd dafür... also bring du dieKiste zum laufen, du Oberschlaui...

                  PS: Natürlich hast du Recht, aber der Ton macht die Musik...
                  Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                  When everything else fails, manipulate the data...
                  Beschriftungen / Großformatdruck / Werbemittel

                  Kommentar


                  • #10
                    Wo habe ich dich denn zugeflamed ? Wenn es dir in den falschen Hals gerutscht ist, dann tut mir das leid.
                    Ich habe nur gefragt wie du dir vorstellst, dass dieser Code ablaufen soll (v.a. das echo).
                    Du schienst mir eben nicht verstanden zu haben, was der header() bedeutet und was danach geschieht. Darauf wollte ich dich aufmerksam machen.
                    Und den Ton fand ich gar nicht mal so unanständig. Da gibt's ganz andere glaub mir, warte einfach auf

                    Nochmals ich wollte dich weder runtermachen onch sonst wie herabwürdigen. Wenn du es so verstanden hast, dann nochmals Sorry

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      okay... denn also schwamm drüber...

                      nene.. das war ja richtig, was du schreibst... hätte ich mal nicht schneller getippt, als ich denke, dann wärs auch aufgefallen.

                      soo.. nu brauchen wir aber trotzdem noch ne lösung für den kollegen..

                      ich glaube aber immernoch, dass er den block gar nicht anspringt, wenn er kein typecast macht (für is_int eben), aber das lässt sich ja mit dem modulo sehr schön austricksen..

                      sinn ist ja, zu sehen, ob der nächste stapel $mail_limit mails durch ist, also $ok_mail wieder ein vielfaches von $mail_limit ist.. ob das nun n INT oder float wert ist, braucht nicht zu interessieren.. aber woher soll PHP das auch wissen, wenn mans ihm nicht erklärt..

                      in diesem sinne.. greetz, high
                      Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                      When everything else fails, manipulate the data...
                      Beschriftungen / Großformatdruck / Werbemittel

                      Kommentar


                      • #12
                        ...dass er den block gar nicht anspringt, wenn er kein typecast macht (für is_int eben),
                        OffTopic:

                        Doch der Block springt bestimmt an. Probier mal folgenden Code
                        PHP-Code:
                        for($i=0;$i<=100;$i+=1){
                            if(
                        is_int($i/3)){
                                echo 
                        $i/3.' ist ein Int<br />';
                            }else{
                                echo 
                        $i/3.' ist kein Int<br />';
                            }

                        Jede dritte Zahl ist ein int. Das liegt daran, dass php das Type Casting selbst macht und immer den 'besten' Typ für eine Variable bestimmt. Von dem her erklärt sich das php selbst


                        Ich vermute immer noch stark, dass Husti eiin Problem mit register_globals hat. Und beim Location wäre eigentlich eine absolute Pfadangabe inkl http://vorgesehen.
                        Also etwas in der Richtung
                        PHP-Code:
                        if(is_int($ok_mail/$mail_limit)){
                            
                        header('Location: http://www.husti.de'.$_SERVER['PHP_SELF'].'?infoid='.$infoid.'&ok_mail='.$ok_mail);
                            exit;
                        }else{
                            
                        //

                        Ausserdem könnte es nicht schaden die Var $_GET['ok_mail'] vor dem Einbau in eine MySql Query mittels mysql_real_escape_string() zu entschärfen.
                        So long...
                        Gruss

                        tobi
                        Zuletzt geändert von jahlives; 14.07.2006, 04:28.
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Hallo jahlives und highrise,

                          sorry, wenn hier wegen meiner Unfähigkeit kleine "Streitigkeiten" entstehen, während ich mit meinem Labbi Gassi gehe und danach ins Bett falle.
                          Mein Zwischenstand zum Problem:

                          Nach leichter Mdoifikation habe ich in vorsichtigen 50er Schritten ohne Probleme meine knapp 350 Rundschreiben versendet.

                          - if(is_in( ... )) hat keine Probleme verursacht - modulo ist natürlich auch sehr nett
                          - der header hat alles sauber übergeben
                          - nach ähhhm 7 Klicks war alles gegessen - natürlich nicht das Gelbe vom Ei
                          Ich gebe zu, dass meine Lösung sicher kein Geniestreich ist.
                          Sofern es von Interesse ist, poste ich in der Folge mal meine jetzige (funktionierende) Lösung und ggf. später mal die Enfassung.

                          Bis dahin erstmal vielen Dank für Euer Engagement (<- richtig?) und tut auch mal was gegen Eure Keller- bzw. Nato- Bräune!
                          Gruß Husti
                          Und ist man alt wie ein Kuh, lernt man immer noch dazu.
                          THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

                          Kommentar

                          Lädt...
                          X