Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
472 views
in Technique[技术] by (71.8m points)

php - How to send emails using PHPMailer in the background?

PHPMailers is doing a fine job in sending emails from a gmail account. But it takes quite a bit of time, and the page won't show the response until the email has been sent. Any ways to send the email in the background so that I can provide a better user experience to the user? Thanks!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The use of an email queue and php exec() is one of the best ways.

It will trigger when needed (avoiding the use of CRONs), it's fast because it is called backgrounded, and immediate.

1. Email queue. Take all fields in a table's MySQL with an insert, something like:

$queryIN="INSERT INTO email_queue (date,subject,body,destination,idle) values (...)";
mysql_query($queryIN);

That's important because you will need an independent background process, so also it's a good idea for registering and auditing all outgoing emails.

2. PHP exec(). After inserting in MySQL is time to call as external execution:

exec("wget -qO- http://example.com/index.php?process_email_queue=1 &> /dev/null &");
  • Take note, options from wget -q0- and &> ... /dev/null & are needed to suppress output and call as a background process.

3. Same script file index.php or other for processing call of a queue:

This way, it will call our index.php (you can use other name file), and process outgoing:

if ($_GET['process_email_queue']==1) { ...code for sending idle emails queue...  }

Perhaps you have to touch some php.ini options for exec(), is not a big deal.

Once everything is running correctly, you will offer a better web navigation and email handling for fast response and zero waits.

In some cases you will pass from waiting from a direct email 2.60 secs to queue-exec-background 0.024 secs, which is a speed improvement of 11 times faster.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...