Okay. Det jeg normalt gør når jeg på et site skal sende rigtig mange mails ud er at have følgende tabel:
create table mails (
id integer auto_increment primary key,
mail_to varchar(255) not null,
subject text,
content text,
headers text,
send_by datetime, -- Mailen må først sendes efter denne dato...
sent enum('n','y') DEFAULT 'n'
);
så ville jeg løbe dine mails igennem med
while($noget) {
// insert into mails tabellen
}
Hvis du så hver gang du skal sende en mail istedet smider den ned i tabellen får du faktisk et hurtigere system idet PHP er langt hurtigere til at smide en række i en tabel end til at sende en mail. Derudover får du også et centralt register for alle de mails du nu engang sender ud til folk. Derudover plejer jeg også at have tabellen:
create table nospam (
email varchar(255) not null primary key
);
Det sidste du så mangler er et script der sender mails ud fra tabellen. Det kan du lave med følgende kode..
<?
$rs = mysql_query("select id,mail_to,subject,content,headers,email FROM mails LEFT JOIN nospam ON (email = mail_to) WHERE email IS NULL AND send_by < NOW() AND sent = 'n' LIMIT 50");
while($row = mysql_fetch_row($rs)) {
mail($row['mail_to'],$row['subject'],$row['content'],$row['headers']);
// update and set the sent enum field to sent
mysql_query("update mails SET sent = 'y' WHERE id = " . $row['id']);
}
?>
Den sender så kun 50 mails ud og det kan den sagtens nå. Du vil så gerne sætte dette script i cron så det bliver kørt hvert 2 minut eller hvad der nu passer det til load dit system har. Hvis du ikke har kontrol over serveren kan du benytte noget webcron [1], hvor deres system "rammer" din side udfra en eller anden cyklus.
[1]
http://www.webcron.org