Dude wrote:
> Hej alle!
>
> Jeg lavede for længe siden en lille funktion som sendte nyhedsbrev ud
> til alle email adresser, som havde tilmeldt sig (via MySQL).
> Det var bare en løkke, som hentede adresserne ud fra databasen, og
> sendte brevet efterhånden som adresserne blev hentet.
>
> Men nu er der ved at være ca 2000 adresser i databasen - og det er
> efterhånden ved at være en langsommelig affære at sende nyhedsbrevet.
> Udover at jeg skal vente længe på at løkken er færdig, så hænder det at
> der er timeout - så ikke alle modtager nyhedsbrevet.
>
> Jeg må finde en ny metode at sende nyhedsbrev.
Umiddeltbart er der 2 metoder - begge er faktisk delvis beskrevet af Betel.
A. Brug af BCC header. Jeg formoder - ud fra din beskrivelse - at du
sender hver enkelt e-mail via en almindelig e-mail. Altså 2000 modtagere
= 2000 e-mails. I stedet kan du bruge BCC header - og måske tilføje
50-100 e-mail adresser i hver e-mail. Dog vil brugeren egen
e-mail-adresse ikke figurere som modtager adresse.
B. Brug en switch i databasen. F.eks. tilføj et e-mail "is_sent" switch
i databasen og lavet scriptet noget ala
<?php
if(empty($_GET['continue'])) {
$sql = "UPDATE emailtabel SET is_sent = 0";
mysql_query($sql);
}
$limit = 100;
$sql = "SELECT email FROM emailtabel WHERE is_sent = 0 LIMIT ".$limit;
$res = mysql_query($sql);
$doCont = false;
if(mysql_num_rows($res)>=$limit) {
$doCont = true;
}
while($r = mysql_fetch_assoc($res)) {
//send e-mail :)
}
if($doCont) {
header("Location: ./emailSenderScript.php?continue=yes");
}
?>
Kort sagt første gang scriptet køres settes is_sent til 0. Der hentes
100 e-mails af gangen. Så reloades scriptet for hver 100 mail til den er
færdig.
--
Johan Holst Nielsen
Freelance PHP Developer -
http://phpgeek.dk