如何使用PHP在更短的时间内发送批量电子邮件?

时间:2017-07-25 08:42:27

标签: php performance email phpmailer

我发送的批量电子邮件正在发挥作用,但需要花费大量时间。我只发送了10个用户的电子邮件,大约需要2分钟。我必须发送超过10000个用户的电子邮件。更快发送电子邮件的另一种方法是什么?我正在使用PHPMailer。你能帮帮我吗?

的index.php

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<form action="process.php?key=createmail2" method="POST">
     <input type="text" name="emailtemplate" placeholder="email" >
     <input type="text" name="subject" placeholder="subject">
      <textarea name="mailbody" placeholder="mail body"></textarea>
      <input type="submit" name="addmail" value="Add mail" >
</form>
</body>
</html>

Process.php

<?php 
include('mail/PHPMailerConfig.php');
switch($_GET['key']) {
case 'createmail2':createmail2($conn);break;
default : redirect('index.php');
}

function createmail2(){
  $array=explode(",",$_POST['emailtemplate']);
  $arrlength = count($array);
  $subject=$_POST['subject'];
  $mailbody=$_POST['mailbody'];
  send($array,$arrlength, $subject, $mailbody);
}
 ?>

PHPMailerConfig.php

<?php 
require_once('PHPMailerAutoload.php');
function send($array,$arrlength, $subject, $mailbody){
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = '*****';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "abc@domain.com";
$mail->Password = "************";
$mail->setFrom('abc@domain.com', 'Teseting for email');
$mail->Subject = $subject;
$mail->Body =$mailbody;

for($x = 0; $x < $arrlength; $x++)
 {
   $mail->addAddress($array[$x]);

       if (!$mail->send())
     {
        echo "Mailer Error (" . str_replace("@", "&#64;", $array[$x]) . ') ' . $mail->ErrorInfo .   '<br/>';
        break; //Abandon sending
     } 
       else 
     {
        echo "mail sent to : " . $array[$x] ;

     }
     $mail->clearAddresses();
  }
}

1 个答案:

答案 0 :(得分:3)

an example of how to send to a list from a database efficiently in the examples bundled with PHPMailer。通过使用PHPMailer发送大量内容,没有任何内容可能会让您被列入黑名单,但您确实需要谨慎行事。 Mandrill并不神奇 - 如果您通过它发送垃圾邮件,它就像其他任何东西一样容易被阻止。

如果你想同时从PHP发送50个,使用pcntl扩展启动多个进程,但它实际上对你没有多大帮助,因为你会大大增加开销。您可以在PHPMailer中设置SMTPKeepAlive = true,这将减少很多开销(它避免为每条消息建立新的连接),但它仍然不会发送同步消息 - 什么都不会。 SMTP中没有一个选项可以在同一连接上同时发送包含不同实体的多条消息。

在浏览器中加载页面期间发送到大列表是非常不可靠的;使用cron脚本或后台进程进行实际发送,并通过Web界面进行设置。如果您正在等待页面加载,请提示一个提示 - 请尽早致电ignore_user_abort(),以便在浏览器关闭连接时不会停止发送 - 并注意页面刷新!如果你想发送得更快,安装一个本地邮件服务器,如postfix,并使用它来中继 - 它将比直接发送更快,更可靠。

相关问题