NYCPHP Meetup

NYPHP.org

[nycphp-talk] sending email from PHP

DeWitt, Michael mjdewitt at alexcommgrp.com
Thu Jun 3 14:46:38 EDT 2004


I have some issues along these lines but made a few changes in the way PHP
interfaces with sendmail.  Here are the key changes:


1. Set the from address in sendmail before you use it and set delivery mode
to defer.  Make sure your from address is a trusted user of sendmail to
suppress the warning of identity change.

$fromaddress='info at yourdomain.com'
		putenv("PHP_SENDMAILPARAMS= -O DeliveryMode=defer -f
$fromaddress");

2. Build your lists and use the regular ole mail command

			$datasent=mail($toaddress, $subject,
$bodytext, "From: ".$fromaddress."\r\n"
			     ."Bcc:".$addbcc."\r\n"
				."Reply-To: ".$fromaddress."\r\n"
				."Errors-To: <".$fromaddress.">"."\r\n"
				."X-Mailer: PHP/" . phpversion());

3.Flush the queue or just wait for sendmail's natural queue flush (depends
on how you have this setup and how quickly you need to process the queue)

$processq=exec('/usr/lib/sendmail -q >/dev/null &');

Making these changes made email broadcasts practical and is 100 x faster
than the default setup where php waits for sendmail to deliver.

Hope this helps

Mike




> -----Original Message-----
> From:	corey szopinski [SMTP:corey at domanistudios.com]
> Sent:	Thursday, June 03, 2004 1:20 PM
> To:	NYPHP Talk
> Subject:	[nycphp-talk] sending email from PHP
> 
> I'm trying to build a tool to send dynamic emails (think order summary)
> from PHP. I'm running into very long delays waiting for sendmail to return
> a result.
> 
> For example, a person submits an order, the function that handles  the
> transaction does a couple of things:
> 
> 1. Sends an order confirmation to the store
> 2. Sends an order confirmation to the customer
> 
> The whole process can take over 1 minute, which times out the browser.
> I've tracked it down the delay to sendmail verifying the remote email
> address. Since sendmail talks to the remote mail server in real-time, any
> network lag, or DNS lag, causes the order process to hang. In my case, it
> does it twice.
> 
> I've looked at Pear Mail_Queue, and that looks interesting, but a bit
> overkill. I've also looked at going around the mail() function and opening
> an SMTP socket directly to sendmail (same delays... in fact when I open a
> session via command line, I can see the exact step in the SMTP conversion
> where the lag happens)
> 
> Here's what I'd like to do (and this would be helpful for anyone sending
> out a modest volume of email)...
> 
> 1. send the mail to sendmail
> 2. sendmail puts it into a queue
> 3. sendmail periodically checks this queue and sends the email.
> 
> Essentially, I'd like to fork the slow lookup stuff to the background,
> returning control the browser as soon as possible. This has the added
> benefit of scaling to very large emails/hour since the browser never has
> to wait for sendmail (or an external server) before a visitor can move on.
> 
> I'm pretty sure that this is intrinsic to the way sendmail works, but most
> of the documentation talks about the queue holding mail that's not
> deliverable. What I'd like to do is put to put a delay on the email before
> it's processed by sendmail.
> 
> Any ideas?
> 
> -corey
> 
> 
> 
> 
> DOMANI STUDIOS
> 
> Corey Szopinski
> Technology Director
>    
> corey at domanistudios.com 
> 70 Washington St. Suite 710  
> Brooklyn, NY 11201
> 718.797.4470  x116 
> 
>  << File: ATT13382.txt >> 



More information about the talk mailing list