Skip to content

Instantly share code, notes, and snippets.

@zabustak
Forked from IftiMahmud/PHPMySqlMassEmailer.php
Created November 18, 2019 22:00
Show Gist options
  • Save zabustak/fff60993f21d40d460560342f7e12225 to your computer and use it in GitHub Desktop.
Save zabustak/fff60993f21d40d460560342f7e12225 to your computer and use it in GitHub Desktop.
PHP Script to send mass email. This script will take subscribers emails from MySql database and send them bulk emails. Comes with Unsubscriber script.
<?php
//SOURCE: http://thedigilife.com/bulk-email-script-in-php-and-mysql-database/
$con = mysql_connect("localhost","dbuser","dbpass"); // replace dbuser, dbpass with your db user and password
mysql_select_db("dbname", $con); // replace dbname with your database name
/*
To use this script database table must have three fields named sno, email and sub_status
*/
$query = "select sno, email from dbtable where sub_status = 'SUBSCRIBED'";
$result = mysql_query($query, $con);
$emails = array();
$sno = array();
while($row=mysql_fetch_assoc($result)){
$sno[] = $row['sno']; // this will be used to unsubscribe the user
$emails[]=$row['email']; // email id of user
}
/* you can also get email id data from CSV using below code */
//$file = file_get_contents("travel_database.csv");
//$emails = explode(",",$file);
/* count.txt is used to store current email sent number/count */
$count = file_get_contents("count.txt");
for($i=$count;$i<count($emails);$i++)
{
$to = $emails[$i];
// subject
$subject = 'Set Your Title Here';
// message
$message = file_get_contents("sample.html"); // this will get the HTML sample template sample.html
$message .= '<p><a href="http://yourdomain.com/path-to-folder/unsubscribe.php?id='.$sno[$i].'&username='.$emails[$i].'">Please click here to unsubscribe.</a></p>
</body>
</html>';
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
//$headers .= "To: $to" . "\r\n";
$headers .= 'From: Name <info@yourdomain.com>' . "\r\n";
//$headers .= 'Cc: sendcc@yourdomain.com' . "\r\n";
//$headers .= 'Bcc: sendbcc@yourdomain.com' . "\r\n";
// Mail it
if(mail($to, $subject, $message, $headers)) {
$file = fopen("mailsentlist.txt","a+"); // add email id to mailsentlist.txt to track the email sent
fwrite($file, $to.",\r\n");
fclose($file);
}
else
{
$file = fopen("notmailsentlist.txt","a+"); // add email to notmailsentlist.txt here which have sending email error
fwrite($file, $to.",\r\n");
fclose($file);
}
if(($i-$count)>=200) // this will send 200 mails from database per execution
{
$filec = fopen("count.txt",'w'); // store current count to count.txt
fwrite($filec, $i);
fclose($filec);
break;
}
}//for end
$filec = fopen("count.txt",'w'); // store fine count to count.txt this will be used as a start point of next execution
fwrite($filec, $i);
fclose($filec);
?>
<?php
//if(($i-$count)&gt;=100) // You can set the cron job on sendmail.php on particular time frame. For example if you hosting provider support only 100 mail per hour than you can set cron job par hour and update the value here.
?>
<?php
$con = mysql_connect("localhost","dbuser","dbpass");
mysql_select_db("dbname", $con);
$sno = (integer)$_GET['id'];
$email = mysql_real_escape_string($_GET['username']);
$query = "update tablename set sub_status = 'UNSUBSCRIBED' where sno = $sno and email = '$email'";
mysql_query($query);
echo "You have Successfully unsubscribed. Thank you for using the service.";
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment