Mail() Problem

piti66

Erfahrenes Mitglied
Hey,

und zwar bastele ich gerade an einem Newsletterscript! Nun bin ich endlich am Mailversenden angekommen! Meine Test ergeben dass ich nur für 42 Mails über eine Minute brauche! Dass kanns doch nicht sein?
Hier mal der wichtige Teil des Scripts:
PHP:
            //Mails verschicken
            //Datenbankabfrage User
            $query_user="SELECT * FROM ".$präfix."user where aktiv=1 AND id_gruppe='".$gruppe."'";
            $abfrage_user=mysql_query($query_user);            
            $anzahl_user=mysql_num_rows($abfrage_user);
            //Versand
            $xtra= "From: ".$abmail."\r\n";
            $xtra.=    "Reply-To:".$abmail."\r\n";
            $xtra.= "Content-type: text/html;charset=iso-8859-1\r\nContent-Transfer-Encoding: 8bit\r\n";
            $xtra.= "X-Mailer: PHP ". phpversion();    
            while($row_user=mysql_fetch_array($abfrage_user)) {
                //Austragungslink einfügen
                if($row_config['aus_link']==1) {
                    $code="<a href=\"".$row_config['pfad']."newsletter.php?action=austragen&mail=".$row_user['mail']."\" target=\"_blank\">Austragungslink</a>";
                    $text=$row_config['default_aus'];
                    $text=platzhalter($text,$code);
                }
                $text="<br><br>".$text."</div></body>\r\n</html>";
                //Mail versenden
                if(mail($row_user['mail'], $bet, $mailtext.$text, $xtra)) {
                    echo ".";
                }    
            }

Hab auch schon mal den Teil mit dem Austragungslink rausgelassen, wird aber auch nicht schneller! Jemand ne Idee was da so langsam ist?
Würde es auch gerne so machen dass immer 100 versendet werden und dann wieder 100 und so weiter! Und dann halt ausgabe 100 versendet ->200 versendet u.s.w. Jemand ne Idee! Ne weiterleitung wird schwer, weil ich ja da die ganzen Variablen nicht mitbekomme, weil Sie für get zu groß sind odeR?

mfg

Sebastian
 
Is ja witzig ... Ich hab mein NL script gerade fertig gestellt. Vielleicht probierst du mal dieses - Funktioniert wunderbar ohne großen Zeitaufwand beim Verschicken
PHP:
echo 'Senden der Newsletter <br>';
echo '<i>'. $_POST[nachricht] .'</i><br>';
echo 'an:';
echo '<ul>';
$result = mysql_query("SELECT * FROM :TABLE: WHERE status = 0 ")or die(mysql_error);  
          while ($row = mysql_fetch_array($result))
                    {   
					       echo '<li> '.$row[mailaddy].'</li>';
						   

$header_   = "MIME-Version: 1.0\n";
$header_  .= "Content-type: text/html; charset=iso-8859-1\n";
$header_  .= "From:$domain<noreply@$domain>\n";

$mailing =
'<html><head> 
<title>NEWSLETTER '.$domain.'</title> 
<style type="text/css">
<!--
body {
background-color:#fff;
color:#333;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
margin:0px 0px 0px 0px
}
h1 {
color:#9c0;
font-size:14px;
margin-bottom:18px;
}
a {
color:#9c0;
text-decoration:none
}
a:hover {
color:#900;
}

-->
</style>
</head> 
<body> 
<br><br><br>

<div style="margin:30px 10px 10px 10px">
<h1> Newsletter von '. $domain .'</h1>
<br>
<div style="border:1px solid #f1f1f1; padding:5px 5px 5px 5px; margin:0px 10px 0px 10px">
'.$_POST[nachricht].'
</div>
<br><br>
<i>
mit freundlichen Grüßen verbleibend<br>
Eure Steffi
</i>
<br><br><br><br>
<span style="font-size:10px; color:#777">
Du möchtest keine Newsletter mehr von '.$domain.' erhalten? Dann melde Dich ab unter:<br><br>
<a href="http://'.$domain.'/out.php?code='.md5($row[id]).'">http://www.'.$domain.'.com/out_nl.php?code='.md5($row[id]).'</a>
<br><br>
Hinweis: Dies ist eine automatisch generierte E Mail und kann nicht beantwortet werden.
</span>
</div>
</body> 
</html>';
						   // + + + MAILING + + +
mail($row[mailaddy],'Newsletter ['.$domain.']',$mailing."\n",$header_);

					} 
echo '</ul>';
echo 'ERFOLGREICH';
}
Bei dem Deaktivierungslink sieht das wie folgt aus:
PHP:
<?php

$result = mysql_query("SELECT * FROM newsletter WHERE (md5(id)) = '". $_GET[ code ] ."' ")or die(mysql_error());
while ($row = mysql_fetch_array($result))
                    {   
echo '<h1>NEWSLETTER abgemeldet</h1>
<div style="padding:5px 5px 5px 5px; border:1px solid #f1f1f1">
Deine Mailadresse <strong>'.$row[email].'</strong> wurde aus der aktiven Mailing - Liste entfernt.
</div>';
mysql_query("UPDATE newsletter SET status='1'     WHERE (md5(id)) = '". $_GET[ code ] ."'", $db);
					} 

?>

wenn einer Langeweile hat, ändert er in der URI nur die übergebene id fortlaufend und setzt alles auf inaktiv, wenn du nur die id übergibst - daher hab ich den Weg mit md5 gewählt - in diesem Falle für die id. Kannst natürlich auch namen, oder oder oder einsetzen

Ich hoffe das hilft dir weiter?
 
Hey,

danke dir! Will aber gern mein Script benutzen!
Würde es auch gerne so machen dass immer 100 versendet werden und dann wieder 100 und so weiter! Und dann halt ausgabe 100 versendet ->200 versendet u.s.w. Jemand ne Idee! Ne weiterleitung wird schwer, weil ich ja da die ganzen Variablen nicht mitbekomme, weil Sie für get zu groß sind oder? MetaRefresh?

mfg

Sebastian
 
Hey,

also irgendwie dauert es immer noch zu lange! Habe jetzt einiges geändert! Das script brauch für 100Mails ca. 4min! Also bei 25000 dauert es ja dann ewig! Jemand ne idee an was das liegen könnte! Hier das Script in geänderter Form, der Teil mit dem Versand!

PHP:
    //Mail versenden
    else if($action=="mailsenden") {
                //Variablen
                $counter=$_GET['counter'];        
                $ende=$_GET['ende'];                
                $mail_anzahl=$_GET['mail_anzahl'];
                $limit_anf=$_GET['limit_anf'];
                $limit_end="5";
                if($ende=="") { $ende="0"; } else { $ende+=$mail_anzahl; }
                if($limit_anf=="") { $limit_anf="0"; } else { $limit_anf+=$mail_anzahl; }
                $mail_anzahl="0";                
                //Datenbankabfrage useranzahl
                $query_user1="SELECT * FROM ".$präfix."user where aktiv=1 AND id_gruppe='".$gruppe."'";
                $abfrage_user1=mysql_query($query_user1);    
                $anzahl_user1=mysql_num_rows($abfrage_user1);
                if($anzahl_user1 > $ende) {    
                    //Newsletterdatei auslesen
                  $datei = fopen("newsletter.txt","r+");
                    while (!feof($datei)) {
                    $mailtext.=fgets($datei,1000000);
            }        
                    //Mails verschicken
                    //Datenbankabfrage User
                    $query_user="SELECT * FROM ".$präfix."user where aktiv=1 AND id_gruppe='".$gruppe."' LIMIT ".$limit_anf.",".$limit_end."";
                    $abfrage_user=mysql_query($query_user);            
            //Mailheader bestimmen
                    $xtra.=    "MIME-Version: 1.0\r\n";
                    $xtra.=    "Reply-To:".$abmail."\r\n";
                    $xtra.= "Content-type: text/html;charset=iso-8859-1\r\n";
                    $xtra.= "From: ".$abmail."\r\n";
                    //Mail versand
                    while($row_user=mysql_fetch_array($abfrage_user)) {
                        
                        //Austragungslink einfügen
                        if($row_config['aus_link']==1) {
                            $code="<a href=\"".$row_config['pfad']."newsletter.php?action=austragen&mail=".$row_user['mail']."\" target=\"_blank\">Austragungslink</a>";
                            $text=$row_config['default_aus'];
                            $text=platzhalter($text,$code);
                        }
                        $text="<br><br>".$text."</div></body>\r\n</html>";
                        //Mail versenden
                        mail($row_user['mail'], $bet, $mailtext.$text, $xtra);            
                        $mail_anzahl++;
                    }
                    $counter+=$mail_anzahl;
                    echo "Der Newsletter wurde bis jetzt an ".$counter." von ".$anzahl_user1." versendet! ";
                     echo "<META HTTP-EQUIV=Refresh CONTENT=\"1; URL=".$_SERVER['PHP_SELF']."?action=mailsenden&mail_anzahl=".$mail_anzahl."&limit_anf=".$limit_anf."&ende=".$ende."&counter=".$counter."\" />";                
                }
                else {
                    echo "<font class=\"erfolg\">Newsletter wurde an ".$counter." User versendet!</font>";    
                }
            
    }
 
So! Hab mal ein anderes Script probiert und es dauert genauso lange! ann es vielleicht an irgendwelchen Servereinstellungen oder inis liegen?

mfg

Sebastian
 
Zurück