Mailscript läuft zu lange

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

  • Mailscript läuft zu lange

    Hi Leute

    ich habe mir ein Massenmailscript gebastelt welches die Daten aus ner MySQL DB bekommt. Nun läuft dieses bei versenden von 33 Mails zu lange und wird vom PHP abgebrochen. Wie kann ich ohne in der PHP ini die Laufzeit zu verändern das Problem beheben?

    Hier mal mein Script:
    Die Variable Ort wird vorher durch in nem Formular festgelegt.

    PHP-Code:
    function dbconnect($sql_anweisung)
    {
        
    $host "localhost";
        
    $db "e-mails";
        
    $user "";
        
    $passw "";
        
        
    $conn = @mysql_connect ("$host""$user""$passw")or die ("Verbindung zur Datenbankserver konnte nicht hergestellt werden!");
        
    mysql_select_db("$db")or die("Auswahl der Datenbank fehlgeschlagen!");
        
    $cur mysql_query($sql_anweisung,$conn) or die ("Die SQL Anweisung: $sql_anweisung ist fehlerhaft!");
        
    mysql_close($conn);
        
        return 
    $cur;
    }
    $fail 0;

    if(isset(
    $ort))
    {
        foreach (
    $ort as $value)
        {
            
    $cur dbconnect("SELECT name,adresse FROM $value");
            while(
    $row mysql_fetch_row($cur))
            {
                if(
    $betreff !="" and $nachricht != "")
                {
                    
    $headers "From: Rundmail <testmail@gmx.de>\r\n";
                    
    $headers .= "To: ".$row[0]."<".$row[1].">\r\n";
                    
    $headers .= "MIME-Version: 1.0\r\n";
                    
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";    
                    
    $nachrichthtml "
                    <html>
                    <head>
                    <title>Info</title>
                    </head>
                    <body>
                    <font face='Arial, Helvetica, sans-serif' size='2'>"
    .nl2br($nachricht)."</font>
                    </body>
                    </html>
                    "
    ;
                    
    $senden mail($row[1] ,$betreff$nachrichthtml$headers);
                    
                    if(
    $senden != 1)
                        
    $fail++;
                }
            }
        }


  • #2
    .. versuchs mal damit: set_time_limit(0)

    greetz subabrain!

    PS: brech deinen code um ^^

    Kommentar


    • #3
      Tja das wollte ich schon tun nur wird das von meinem Provider unterdrückt. Ich bin aber der Meinung das ich irgendwo in meinem Script noch nen Fehler habe. Bei mir sind es nur 33 Adressen aber was machen die die 4000 oder mehr Mails versenden wollen? Warten die dann 3 Stunden? Nicht wirklich oder?

      Kommentar


      • #4
        hi,

        also

        1. um dir ärger mit den mods zu ersparen würde ich jetz mal den code umbrechen.

        2. sind bei dem link wo ich dir gegeben hab kommentare drunter wie du diese 30 sekunden sperre umgehen kannst - stichwort : outputbuffer!

        also schau dir diese kommentare an teste es und du wirst sehen das es klappt


        greetz subabrain!

        PS: ich chill jetz in der sonne - und bin daher nichtmehr zu erreichen

        Kommentar


        • #5
          wieviele user hast du denn in einer tabelle so stehen, bzw. wie oft wird dbconnect() ausgeführt??

          Kommentar


          • #6
            So nachdem ich mir das Beispiel in der PHP Hilfe nochmals genauer angesehen habe läuft das Script jetzt wesentlich schneller.
            Der Code Schaut jetzt so aus:

            PHP-Code:
            if($betreff !="" and $nachricht != "")
            {
                
            $headers "From: Rundmail <testmail@gmx.de>\r\n";
                
            $headers .= "To: ";
                if(isset(
            $ort))
                {
                    foreach (
            $ort as $value)
                    {
                        
            $cur dbconnect("SELECT name,adresse FROM $value");
                        while(
            $row mysql_fetch_row($cur))
                        {
                            
            $to .= $row[1].", ";
                            
            $headers .= $row[0] . "<" $row[1] . ">, ";
                        }
                    }
                    
            $to substr($to,0,strlen($to)-2);
                    
            $headers substr($headers,0,strlen($headers)-2);
                }
                
            $headers .= "\r\n";
                
            $headers .= "MIME-Version: 1.0\r\n";
                
            $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";    
                
            $nachrichthtml "
                <html>
                <head>
                <title>Info</title>
                </head>
                <body>
                <font face='Arial, Helvetica, sans-serif' size='2'>"
            .nl2br($nachricht)."</font>
                </body>
                </html>
                "
            ;
                
            $senden mail($to ,$betreff$nachrichthtml$headers);

            Hab hier nur die Verbindung zur DB weggelassen. Daran lag ja nicht.
            So läuft es jetzt! Danke für Eure Antworten!

            Kommentar


            • #7
              Das kann aber nicht so ganz das gelbe vom Ei sein, wenn jetzt jeder, der deinen Newsletter erhält, im To-Feld alle anderen Empfänger sehen kann.

              Kommentar


              • #8
                PhilippM das stimmt natürlich. Bei mir sende ich aber ne Mail zu den Leuten die eh schon von den anderen die Adresen haben. Aber dazu kannst du laut PHP Hilfe noch an die Variable Header folgendes nach From: einfügen:

                PHP-Code:
                $headers .= "Cc: [email]geburtstagsarchiv@example.com[/email]\r\n";
                $headers .= "Bcc: [email]geburtstagscheck@example.com[/email]\r\n"
                CC währe Carbon Copy (Durchschlag) und BCC Blind Carbon Copy (Blind Durchschlag). Bei letzten sollte dann nur der jeweilige Empfänger da stehen. Ich hab es selbst noch nicht getestet.

                Kommentar


                • #9
                  DB auf
                  DB zu
                  DB auf
                  DB zu
                  ...

                  wir oft willst du das eigentlich machen in deinem Script?

                  normalerweise macht man einmal die DB auf,
                  viele viele SQL Anweisungen
                  und einmal die DB zu
                  TBT

                  Die zwei wichtigsten Regeln für eine berufliche Karriere:
                  1. Verrate niemals alles was du weißt!


                  PHP 2 AllPatrizier II Browsergame

                  Kommentar


                  • #10
                    @TBT: Seine Funktion dbconnect() nimmt gleich eine Query, ist also mindestens unglücklich benannt. Aber man kann nicht ohne weiteres sagen, ob da jedes Mal ein *_connect() und *_close() dahintersteckt.
                    Ich vermute eher, dass die Funktion bei jedem Aufruf erstmal checkt, ob bereits eine Verbindung existiert und diese dann auch nutzt.

                    Kommentar


                    • #11
                      function dbconnect($sql_anweisung)
                      {
                      $host = "localhost";
                      $db = "e-mails";
                      $user = "";
                      $passw = "";

                      $conn = @[color=red]mysql_connect[/color] ("$host", "$user", "$passw")or die ...
                      mysql_select_db("$db")or die ...
                      $cur = mysql_query($sql_anweisung,$conn) or die ...
                      [color=red]mysql_close[/color]($conn);

                      return $cur;
                      }
                      ich denke schon
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Kommentar


                      • #12
                        Also ich hab vornweg drei Häckchenfelder die die Variable Ort bestimmen. Ist ein Häckchen gesetzt wird der zugehörige Ort aus der Datenbank mit Select abgrufen. Da ich nur 3 Orte insgesamt hab hält es sich in Grenzen. Man kann aber auch gleich am anfang ein mysql_connect machen alles abfragen und danach ein close. Währe sicherlich eleganter.

                        Kommentar


                        • #13
                          unterhalte dich doch mit direkt mit dem SMTP Server, ohne den mail()
                          Befehl. Das ist weit schneller, und du kannst mehrere Mails auf einmal abgeben.
                          Beim mail() Befehl wird die Verbindung immer wieder wieder auf- und abgebaut.
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar


                          • #14
                            Also mich direkt mit dem SMTP Server zu Unterhalten klingt interessant. Aber ich weis nicht wie? Vieleicht solltest du noch wissen das mein PHP auf nem Windows Webserverläuft. Da hat das PHP ja keinen Sendmail Pfad sondern direkt ein Konto auf dem lokalen Mailserver ohne Anmeldung.

                            Kommentar


                            • #15
                              http://www.php-resource.de/forum/sho...highlight=smtp
                              TBT

                              Die zwei wichtigsten Regeln für eine berufliche Karriere:
                              1. Verrate niemals alles was du weißt!


                              PHP 2 AllPatrizier II Browsergame

                              Kommentar

                              Lädt...
                              X