繁体   English   中英

如何通过SMTP协议获取发送电子邮件的结果?

[英]How to get the result of send email via SMTP protocol?

各位,我正在使用电子邮件系统通过SMTP协议发送电子邮件与PHP,一切顺利,现在我可以发送邮件没有问题,我有拖曳问题实际上,我希望我会找到一个解决方案,1 - 我发送电子邮件给用户使用phpmailer库,但我无法控制并获得发送电子邮件的结果,因为我在一个SMTP连接上发送了大约10封电子邮件。 这是我的发送代码

 $mail = new PHPMailer;
 $froms=$respu['froms'];    
 $mail->Timeout = 3600;    
     $mail->SMTPDebug = 2;                            // Enable verbose debug output
    $mail->isSMTP();                                 // Set mailer to use SMTP
    $mail->Host = $respu['server'];                              // Specify main and backup SMTP servers
    $mail->SMTPAuth = $respu['authentication'];                    // Enable SMTP authentication
    $mail->Username = $respu['username'];                    // SMTP username
    $mail->Password = $respu['password'];                         // SMTP password
    $mail->SMTPSecure = $respu['security'];                    // Enable TLS encryption, `ssl` also accepted
    $mail->Port = $respu['port'];                             // TCP port to connect to
$mail->SetFrom($respu['username'],$froms);  
$mail->AddAddress($to);



    $mail->Subject = $subject;
    $mail->MsgHTML($message);



    if(!$mail->Send()) {
        //$errors=$mail->getSMTPInstance()->getError();
        $date=date('Y-m-d h:i');
        echo  $msg= "Message Not  Sent: to $to " . $mail->ErrorInfo;
        $date=date('Y-m-d h:i');

        $sql="insert into log (log_text,user_email,log_time,status)values ('$msg','$to','$date',0) ";
     $this->query_return($sql);
        exit();
    } else {$date=date('Y-m-d h:i');


         $sql="insert into log (log_text,user_email,log_time,status)values ( 'Message Sent Successfully ','$to','$date',1) ";
 $this->query_return($sql);
    }

即使电子邮件错误,if(!$ mail-> Send())条件每次都返回true。 它的工作方式是测试SMTP连接是否完成,我想知道用户是否收到了电子邮件。

我的第二个问题是,我有超过3000个邮件地址,我想同时向他们发送电子邮件,发生的事情是程序需要很长时间而且我要等很长时间才能完成它,怎么能我做得更快。

要发送到列表,请使用PHPMailer提供的邮件列表示例作为起点。 另请阅读有关发送到列表的Wiki文章

为了获得最佳性能,您希望提交到本地或附近的邮件服务器,然后邮件服务器负责继续交付。 某些消息可能无法传递,在这种情况下,您将需要依赖于反弹处理程序; 当消息无法发送时,它将返回到Return-path地址,您可以通过在PHPMailer中设置Sender属性来控制该地址(默认情况下,它使用您的From地址)。 需要注意的是作为一个发送者你永远不应该设置一个return-path头自己; 这是接收服务器的工作。

但请注意:处理弹跳是非常不愉快的; 因为弹跳消息在正常使用中相当“不可见”,这意味着它们的质量变化很大 例如,某些Microsoft Exchange服务器的跳出可能会忽略该消息被退回的地址! 您可以使用VERP寻址来帮助您识别原始收件人地址甚至单个邮件,从而处理该情况(以及配置错误的邮件服务器的许多其他缺点)。 无论你如何处理这个问题,你都需要与你的邮件服务器保持良好的对话。 使用外部服务来处理这样的发送不一定更好,因为它们面临完全相同的问题,但至少它们可能会处理许多反弹处理的不愉快。

仅供参考我运行https://smartmessages.net,一个电子邮件营销服务; 它是围绕PHPMailer构建的(这也是我维护者的部分原因),我们可以发送大约300条消息/秒(使用非常好的邮件服务器),因此PHPMailer完全可以实现良好的吞吐量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM