Hi, I’ve had to create an email blast and database for my work for us to send emailers. We sent the first one a few days ago and have received a small handful of emails from people saying that they have received it between 10 - 20 times. I have checked the database and indeed there were quite a few duplicate email address most have been dupliced two or three times.
In my script, I set an enum for when each address is process so I’m guessing theoretically no one should receive it more than once. I have now removed all of the duplicates and there is only one address per person.
I woke up in the morning and noticed now 7,205 addresses had received the emailer so tried sending it again so I’m wondering if that’s what done it - though the vast majority had the enum set to 1 which is good. Just making sure for next time that all is good to send and hopefully a small handful WILL NOT receive 10 - 20 copies of the emailer.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html>
<head>
<title>Bulk Email Control Panel</title>
<link rel="stylesheet" type="text/css" href="controlstyles.css" />
</head>
<body>
<div class="contOuter">
<div class="contInner">
<?php
include('tpl_includes/header.php');
echo '<fieldset><legend>Emailer Sending Status<div class="container"><img src="loading.png" class="textmiddle" width="16" height="16" /><span class="large"> Emailer is currently sending...</span></div>'; flush();
$prodid='Kriss';
$htmlContent=stripslashes($_POST['htmlContent']);
$success=$_POST['successEmail'];
$subject=$_POST['subject'];
include_once "connection.php";
$sql = mysql_query("SELECT * FROM addresses WHERE received='0'");
$count = mysql_query("SELECT COUNT(*), `received` FROM `addresses` GROUP BY `received`");
$count1 = mysql_fetch_row($count);
$result = mysql_query("SELECT * FROM addresses");
$num_rows = mysql_num_rows($result);
$numRows = mysql_num_rows($sql);
$mail_body = '';
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
$email = $row["email"];
$mail_body = $htmlContent;
$subject = "$subject";
$headers = "From:info@mifsuds.com\\r\
";
$headers .= "Content-type: text/html\\r\
";
$to = "$email";
$mail_result = mail($to, $subject, $mail_body, $headers);
if ($mail_result) {
mysql_query("UPDATE addresses SET received='1' WHERE email='$email' LIMIT 1");
} else {
}
}
echo '<div class="large" style="color:#009900; font-weight: bold; margin: 0px 0px 0px 19px;">Emailer has been sent.</div>';
echo "<span style='margin:0px 0px 0px 19px;'>Emailer sent to $count1[0] of the $num_rows email addresses in the database.</span></legend></fieldset><br/>
<fieldset>
<legend>Reset Emailer Status</legend>
<form name='newsletter' action='reset-database.php' method='post'>
<input name='submit' type='submit' id='submit' value='Reset Emailer Database' /></form></fieldset><br/>
Now that the emailer has been successfully sent, the database needs to be reset in order to send out the next emailer. Please click the above <span style='font-weight: bold;'>Reset Emailer Database</span>. This will not resend an emailer or delete or screw anything up in the database.
";
?>
<?php
if (!$numRows == 0) {
$subj = "Newsletter Campaign Has Ended";
$body = "<span style='color: #FF0000; font-weight: bold;'>The current newsletter campaign has ended.</span> Emailer sent to <strong>$count1[0]</strong> of the <strong>$num_rows</strong> email addresses in the database.";
$hdr = "From:info@mifsuds.com\\r\
";
$hdr .= "Content-type: text/html\\r\
";
mail("$success", $subj, $body, $hdr);
}
?>
</div>
</div>
</div>
<?php include('tpl_includes/footer.php'); ?>
</body>
</html>
CREATE TABLE IF NOT EXISTS `addresses` (
`id` int(11) NOT NULL auto_increment,
`email` varchar(50) NOT NULL,
`datetime` datetime NOT NULL,
`received` enum('0','1') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6945 ;