mail functie m.b.v. MySql
Ik heb een nieuwsbrief optie op mijn website waarbij ik adressen ophaal uit de database en de content via de while functie laat sturen.
Nu heb ik alleen een probleem.
Het zijn inmiddels 1050 adressen en de server verstuurd ze niet naar alle adressen.
De ene keer zijn het er 350 de andere keer 630.
Ik begrijp niet goed waarom dit gebeurt en hoe ik het op kan lossen dat de server ze naar alle adressen stuurt.
Heeft iemand hier een oplossing voor zonder dat ik me moet gaan verdiepen in een totale verbouwing van mijn script?
Dit script gebruik ik:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
$mailonderwerp = $_POST['Onderwerp'];
$bericht = $_POST['Bericht'];
$select_mail = "SELECT * FROM Nieuwsbrief WHERE Actief ='1'";
$result = mysql_query($select_mail) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$email = $row['Email'];
$voornaam = mysql_real_escape_string($row['Voornaam']);
$tussenvoegsel = mysql_real_escape_string($row['Tussenvoegsel']);
$achternaam = mysql_real_escape_string($row['Achternaam']);
$mailbericht = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="100%" border="0" cellpadding="4" cellspacing="0" id="Table1">
Content
</table>
</body>
</html>';
# Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}
$headers = 'From: Nieuwsbrief <[email protected]>'.$eol;
$headers .= 'Reply-To: [email protected]'.$eol;
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= 'Content-Type: text/html; charset=iso-8859-1'.$eol;
$headers .= 'Content-Transfer-Encoding: 8bit'.$eol;
$headers .= 'X-Mailer: PHP v'.phpversion().$eol;
@mail($email,stripslashes($mailonderwerp),stripslashes($mailbericht),$headers);
}
?>
$mailonderwerp = $_POST['Onderwerp'];
$bericht = $_POST['Bericht'];
$select_mail = "SELECT * FROM Nieuwsbrief WHERE Actief ='1'";
$result = mysql_query($select_mail) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$email = $row['Email'];
$voornaam = mysql_real_escape_string($row['Voornaam']);
$tussenvoegsel = mysql_real_escape_string($row['Tussenvoegsel']);
$achternaam = mysql_real_escape_string($row['Achternaam']);
$mailbericht = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="100%" border="0" cellpadding="4" cellspacing="0" id="Table1">
Content
</table>
</body>
</html>';
# Is the OS Windows or Mac or Linux
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
$eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
$eol="\r";
} else {
$eol="\n";
}
$headers = 'From: Nieuwsbrief <[email protected]>'.$eol;
$headers .= 'Reply-To: [email protected]'.$eol;
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= 'Content-Type: text/html; charset=iso-8859-1'.$eol;
$headers .= 'Content-Transfer-Encoding: 8bit'.$eol;
$headers .= 'X-Mailer: PHP v'.phpversion().$eol;
@mail($email,stripslashes($mailonderwerp),stripslashes($mailbericht),$headers);
}
?>
Wie heeft er een idee hoe ik dit op kan lossen?
Groet,
Nanno
- je hebt geen nette foutafhandeling voor je query
Misschien kan je server het aantal request's niet aan?
Kijk anders eens naar een mail classe als phpmailer of swiftmailer.
Gewijzigd op 21/08/2011 13:28:48 door Jasper DS
Meestal heeft dit met de max_execution_time te maken. Ik heb dat zelf opgelost door dat soort mail batches in een crontab te laten draaien. Dan heb je daar geen last van omdat deze dan op 0 staat.
Ik ben zelf geen php programmeur en ben al blij dat ik er iets van snap.
@Eric: Kan je mij helpen om die contrab in mijn code te verwerken?
Zijn er in dit topic posts getrashed ofzo? Zou zweren dat ik wat gezegd had over BCC?
Gewijzigd op 21/08/2011 22:13:17 door - Ariën -
I got the magic, magic :P
@Nanno
Ik denk eerlijk gezegd dat je beter een tutorial bekijkt. Want de manier waarop je het nu vraagt is eerder een vacature. Je dient echt zelf wat initiatief te nemen. Bijvoorbeeld: wat lukt er niet met je cronjob? Weet je wat een cronjob is? (nee: wikipedia?)
Gewijzigd op 21/08/2011 22:27:28 door Write Down
Ik weet niet of de cronjob de beste optie is in mijn geval.
Een snelle en makkelijke oplossing was meer waar ik op hoopte.
Soms kan namelijk iets heel simpel opgelost worden en soms valt dat tegen.
Ik zoek al een tijdje allerlei forums af en heb al heel wat zitten lezen, maar weet niet waar ik moet beginnen. Dus vandaar mijn vraag om hulp.
Iemand die me verder kan helpen met tips, voorbeelden en of uitwerking van.
Als je op bepaalde tijden een mail wil uitvoeren, zijn cronjobs vaak een handig middel hiervoor. Cronjob dus aanmaken, lukt het niet, vertel waar je vast loopt.