mail systeem
Ik heb een mail systeem gemaakt die niet helemaal goed werkt. Het zou als volgt moeten werken:
1) In het formulier geef ik aan welk html bestand hij moet gerbuiken voor de nieuwsbrief.
2) Met de knop verstuur leest hij dmv een while loop de emailadressen uit en send hij deze naar de leden. Tevens worden de variabelen vervangen om de mail een persoonlijk tintje te gegven
3) Klaar!
Waar gaat het mis? Nou, hij stuurt niet een nieuwe mail naar iedereen, maar plakt er als het ware steeds eenzelfde onder. Dus nr3 op de lijst krijgt 3x dezelfde mail maar dan met de vervangen variablelen van de vorige 2.
Wat zie ik over het hoofd?!
1) In het formulier geef ik aan welk html bestand hij moet gerbuiken voor de nieuwsbrief.
2) Met de knop verstuur leest hij dmv een while loop de emailadressen uit en send hij deze naar de leden. Tevens worden de variabelen vervangen om de mail een persoonlijk tintje te gegven
3) Klaar!
Waar gaat het mis? Nou, hij stuurt niet een nieuwe mail naar iedereen, maar plakt er als het ware steeds eenzelfde onder. Dus nr3 op de lijst krijgt 3x dezelfde mail maar dan met de vervangen variablelen van de vorige 2.
Wat zie ik over het hoofd?!
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
47
48
49
50
51
52
53
54
55
56
57
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
47
48
49
50
51
52
53
54
55
56
57
<form target='_self' method='post'>
<table width="250" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>naam bestand</td>
<td><input name="htmlfile" type="text" id="htmlfile" value="mail.html" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Submit" /></td>
</tr>
</table>
</form>
<?php
if (file_exists($_POST['htmlfile'])) {
include "dbconnect.php";
$sql = "SELECT *
FROM leden
WHERE nieuwsbrief='1'";
$result = mysql_query($sql);
$message .= "\n";
// Hier haal je de volledige HTML bron van je mailtje mee op:
$message .= @implode("", file($_POST['htmlfile'])) . "\n\n";
$message .= "\n";
while ($row = mysql_fetch_assoc($result)) {
$to = $row['email'];
$from = "nieuwsbrief@****.com";
$replyto = "info@****.com";
$subject = "Mail van ****.com";
$headers = "From: $from <$replyto>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html;\n";
// Als je [Voornaam],[Achternaam], ed. in mailtje.php zet
// kan je deze vervangen door een variabele uit b.v. een database
$message = str_replace("[Voornaam]", $row['gebruikersnaam'], $message);
$message = str_replace("[Achternaam]", $achternaamGeadresseerde, $message);
$message = str_replace("[Email]", $emailGeadresseerde, $message);
mail($to,$subject,$message,$headers);
echo "bericht verzonden naar: ".$row['gebruikersnaam']."<br>";
}
}
?>
<table width="250" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>naam bestand</td>
<td><input name="htmlfile" type="text" id="htmlfile" value="mail.html" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Submit" /></td>
</tr>
</table>
</form>
<?php
if (file_exists($_POST['htmlfile'])) {
include "dbconnect.php";
$sql = "SELECT *
FROM leden
WHERE nieuwsbrief='1'";
$result = mysql_query($sql);
$message .= "\n";
// Hier haal je de volledige HTML bron van je mailtje mee op:
$message .= @implode("", file($_POST['htmlfile'])) . "\n\n";
$message .= "\n";
while ($row = mysql_fetch_assoc($result)) {
$to = $row['email'];
$from = "nieuwsbrief@****.com";
$replyto = "info@****.com";
$subject = "Mail van ****.com";
$headers = "From: $from <$replyto>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html;\n";
// Als je [Voornaam],[Achternaam], ed. in mailtje.php zet
// kan je deze vervangen door een variabele uit b.v. een database
$message = str_replace("[Voornaam]", $row['gebruikersnaam'], $message);
$message = str_replace("[Achternaam]", $achternaamGeadresseerde, $message);
$message = str_replace("[Email]", $emailGeadresseerde, $message);
mail($to,$subject,$message,$headers);
echo "bericht verzonden naar: ".$row['gebruikersnaam']."<br>";
}
}
?>
na je include, zet je dit:
$message = '';
$message = '';
Je haalt $message op uit de file. Dat is het origineel. Daar moet je niks aan veranderen. Gebruik in de while() bij het veranderen (str_replace) een nieuwe, andere $varnaam en gebruik die dan weer in het mailtje.
Dus iets van:
Dus iets van:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$mailmessage = str_replace("[Voornaam]", $row['gebruikersnaam'], $message);
$mailmessage = str_replace("[Achternaam]", $achternaamGeadresseerde, $mailmessage);
$mailmessage = str_replace("[Email]", $emailGeadresseerde, $mailmessage);
mail($to,$subject,$mailmessage,$headers);
?>
$mailmessage = str_replace("[Voornaam]", $row['gebruikersnaam'], $message);
$mailmessage = str_replace("[Achternaam]", $achternaamGeadresseerde, $mailmessage);
$mailmessage = str_replace("[Email]", $emailGeadresseerde, $mailmessage);
mail($to,$subject,$mailmessage,$headers);
?>
De functie mail in een while loop gebruiken is niet aan te raden. Veel handiger is het, om de Swift Mailer Class te downloaden en er mee te leren werken.
In jouw geval heb je de batchSend methode nodig.
In jouw geval heb je de batchSend methode nodig.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
@jan:
thnx voor de tip, zal er wat tijd insteken. Meestal vind ik die kant en klare scripts te uitgebreid en daardoor hun doel voorbijschieten, maar zal het een kans geven :-)
@wes:
Simpel maar doeltreffend. $message voor het einde van de loop leegmaken. Dat bedoelde je toch? Ga meteen testen!
@santhe
Hmm.. sterk punt.. ik zal het aanpassen
thnx voor de tip, zal er wat tijd insteken. Meestal vind ik die kant en klare scripts te uitgebreid en daardoor hun doel voorbijschieten, maar zal het een kans geven :-)
@wes:
Simpel maar doeltreffend. $message voor het einde van de loop leegmaken. Dat bedoelde je toch? Ga meteen testen!
@santhe
Hmm.. sterk punt.. ik zal het aanpassen
Swiftmailer is helemaal niet uitgebreid, Swiftmailer heeft gewoon meerdere doeleinden. Je kunt met Swiftmailer zo'n mailtje veel veiliger en makkelijker verzenden doordat je niet meer aan headers hoeft te denken. Bekijk de voorbeelden op de website eens, als je het eenmaal doorhebt is het zo gepiept en het werkt bijna altijd.




