Re: Sending out large amounts of email

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

on 03/05/2009 08:20 PM Brian Hansen said the following:
> Everywhere on the net I read that sending out mail using PHP mail() is slow
> and it is a bad idea and that using some mail class with SMTP directly would
> be much better. I have tested the run my tests with Postfix as the SMTP.

This is a totally wrong misconception. Using SMTP is the slowest method
to queue messages.

The misconception comes from the fact that sendmail is used in many
servers and by default sendmail attempts to send the message right away
when you queue it with the mail function.

However sendmail has options to just drop the message in the local queue
the message instead of deliverying it immediately.

SMTP queueing is much slower because it uses a TCP (SMTP) connection to
connect to the local server and drop the message queue, while when you
use the regular mail function it just drops the message in the queue
without TCP overhead.

Your tests demonstrated that mail() outperforms SMTP because either you
are not using sendmail or it is sendmail with the imediate delivery
option disabled.

You may want to take a look at the slides of a presentation that
addressed this issue here.

If you jump to slide 13 you can see a diagram that shows the path of the
messages when you send them via different methods.

As you may notice using SMTP is the long way to make the message reach
the local mail server queue.

http://www.phpclasses.org/browse/video/3/package/9.html


> I have gotten the best results using PHP mail(). When the volume is belove
> 6000 PHP mail() is by far the fastest.
> 
> Would someone mind sharing experience and perhaps shedding some light on
> this issue?
> 
> What is the best solution in real life dealing with huge amounts of mail?
> PHP mail() vs. some class using SMTP or binary sendmail (or wrapper)?

The fastest way is to just drop the messages in the pickup folder that
some mail servers offer. I am not sure which Linux/Unix servers support
that, maybe postfix does, but I am sure Microsoft Exchange supports it.

Anyway, if you use the regular mail function it may be fine too.

Personally I use qmail but I can control the mail server I have in the
machine of my sites, and just call qmail-inject program directly instead
of the regular sendmail wrapper that the mail function calls.

Other than that, queueing the messages is just one step of bulk message
delivery. Often you need to compose and send complex messages that have
characters then need to be encoded, maybe attachments, embeded pictures
in HTML, etc.. That adds quite a bit of overhead to PHP script message
delivery.

I use the MIME message class below that the presentation above refers.
It provides a bag of tricks to optimize bulk deliveries, depending on
whether you need to personalize or not for each recipient. The talk
about the slides above also address those issues and how they can be
solved to maximize delivery performance and reliability with that class:

http://www.phpclasses.org/mimemessage



-- 

Regards,
Manuel Lemos

Find and post PHP jobs
http://www.phpclasses.org/jobs/

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux