Viewed   77 times

I am currently writing a music blog. The administrator posts a new article every 2-3 days. Once the administrator posts an article, a mass email will be sent to around 5000 subscribers immediately.

What is the best way to implement the mass mail feature?

Does the following function work?

function massmail() 
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);

Another question: If all 5000 subscribers are using Yahoo Mail, will Yahoo treat it as a DDOS attack and block the IP address of my SMTP server?



First off, using the mail() function that comes with PHP is not an optimal solution. It is easily marked as spammed, and you need to set up header to ensure that you are sending HTML emails correctly. As for whether the code snippet will work, it would, but I doubt you will get HTML code inside it correctly without specifying extra headers

I'll suggest you take a look at SwiftMailer, which has HTML support, support for different mime types and SMTP authentication (which is less likely to mark your mail as spam).

Thursday, October 13, 2022

I'd recommend using the third party mailing service Silverpop, or something like it. We've used them for a few years and have been fairly satisfied. They already have relationships with the major email clients (AOL, Yahoo!, Gmail, etc.) and they do a good job of telling you if the stuff you're sending is likely to be classified as SPAM.

They have a fairly extensive API that uses XML HTTP/HTTPS requests that can tie in to existing systems. You can use it to remotely trigger emails, schedule mailings, customize email contents, set up, manage and query huge lists of recipients, run batch processes, etc.

It isn't a perfect service, but compared to a lot of others out there, they do pretty well. I have had very few complaints about them thus far.

Monday, December 5, 2022

Before implementing our own system we used PHPMailer with the isSMTP() option and saw throughput of about 20 emails / sec (build time + send). If you have static content your throughput should be a bit higher.

There is an option to use a persistent SMTP connection.

Saturday, December 10, 2022

You should consider using a PHP mail library such as PHPMailer which would make the procedure to send mail much simpler and better.

Here's an example of how to use PHPMailer, it's really simple!



$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[]",'',$body);

$mail->AddReplyTo("","First Last");

$mail->SetFrom('', 'First Last');

$mail->AddReplyTo("","First Last");

$address = "";
$mail->AddAddress($address, "John Doe");

$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test


$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";


An alternative to PHPMailer is

Friday, August 26, 2022

Update for updated question:

If you don't want to include all that HTML in your PHP code, then yes file_get_contents() is a fine alternative.

You need to include the content type, and MIME version in the headers. This is charset UTF-8 also.

$headers = "From: $from <$from_email>rn". 
           "MIME-Version: 1.0" . "rn" . 
           "Content-type: text/html; charset=UTF-8" . "rn";

Thursday, October 13, 2022
Only authorized users can answer the search term. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :