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

如何使用php在更短的时间内发送大量电子邮件?,php,performance,email,phpmailer,Php,Performance,Email,Phpmailer,我正在发送大量电子邮件,这些邮件很有效,但需要花费大量时间。我只发送了10个用户的电子邮件,大约需要2分钟。我必须发送超过10000个用户的电子邮件。还有什么方法可以更快地发送电子邮件?我正在使用PHPMailer。你能帮我吗 index.php <!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action="p

我正在发送大量电子邮件,这些邮件很有效,但需要花费大量时间。我只发送了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>
<?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);
}
 ?>
<?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();
  }
}

Process.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>
<?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);
}
 ?>
<?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();
  }
}

PHPMailerConfig.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>
<?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);
}
 ?>
<?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();
  }
}
这里有。使用PHPMailer发送大容量数据本身并没有可能让您被列入黑名单,但您确实需要谨慎行事。Mandrill不是魔法——如果你通过它发送垃圾邮件,它和其他任何东西一样容易被阻止

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

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

还有很多。使用PHPMailer发送大容量数据本身并没有可能让您被列入黑名单,但您确实需要谨慎行事。Mandrill不是魔法——如果你通过它发送垃圾邮件,它和其他任何东西一样容易被阻止

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


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

如果你是通过gmail发送邮件,你将无法发送那么多邮件。我想他们有10或20的限制。改用类似亚马逊、MailChimp或类似的服务。不,我不是从Gmail发送的。我会更新它。
$mail->Host='smtp.Gmail.com'-根据您的代码,您使用的是gmail SMTP?我会更新我的代码。如果您是通过gmail发送,您将无法发送那么多电子邮件。我想他们有10或20的限制。改用类似亚马逊、MailChimp或类似的服务。不,我不是从Gmail发送的。我会更新它。
$mail->Host='smtp.Gmail.com'-根据您的代码,您正在使用Gmail SMTP?我会更新我的代码。如果您正在使用自己的SMTP服务器,请不要忘记在DNS中为发件人主机名设置正确的DKIM和/或SPF记录,否则许多电子邮件可能会反弹。我没有使用数据库。我有超过10000封带有逗号的电子邮件。我将直接在输入字段中输入。但我将尝试您的解决方案您引用的链接在发送电子邮件时非常慢。如果您使用自己的SMTP服务器,请不要忘记在DNS中为发件人主机名设置正确的DKIM和/或SPF记录,否则许多电子邮件可能会反弹。我没有使用数据库。我有超过10000封带有逗号的电子邮件。我将直接在输入框中输入。但我将尝试您的解决方案。您引用的链接在发送电子邮件时非常慢。