Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPMailer-某些SMTP邮件不';不发送_Php_Email_Smtp_Phpmailer - Fatal编程技术网

PHPMailer-某些SMTP邮件不';不发送

PHPMailer-某些SMTP邮件不';不发送,php,email,smtp,phpmailer,Php,Email,Smtp,Phpmailer,我有一个向用户发送电子邮件的脚本,有时根据大小将电子邮件分为多条消息。代码如下: for($i=0; $i<count($the_message); $i++){ $mail = new PHPMailer(true); $mail->IsSMTP(); $mail->SMTPDebug = 1; $mail->Host = "my.smtp.server"; $mail->Port = $email_port; $m

我有一个向用户发送电子邮件的脚本,有时根据大小将电子邮件分为多条消息。代码如下:

for($i=0; $i<count($the_message); $i++){
    $mail = new PHPMailer(true);
    $mail->IsSMTP();
    $mail->SMTPDebug = 1;
    $mail->Host = "my.smtp.server";
    $mail->Port = $email_port;
    $mail->Username = "my@email.com";
    $mail->Password   = "mypassword";
    $mail->SMTPAuth   = true;
    $mail->From = $from;
    $mail->FromName = "My Name";
    $mail->IsHTML($is_html);
    if($is_html === TRUE){
       $mail->AltBody = "To view the message, please use an HTML compatible email client, or change your export to a plain text format.";
    }
    foreach($to as $address){
       $mail->AddAddress($address);
    }
    $mail->Body = $the_message[$i];
    $mail->Subject = $the_sub;
    $mail->Send();
}
($i=0;$iIsSMTP())的
;
$mail->SMTPDebug=1;
$mail->Host=“my.smtp.server”;
$mail->Port=$email\u Port;
$mail->Username=”my@email.com";
$mail->Password=“mypassword”;
$mail->SMTPAuth=true;
$mail->From=$From;
$mail->FromName=“我的名字”;
$mail->IsHTML($is\u html);
如果($is_html===TRUE){
$mail->AltBody=“若要查看邮件,请使用与HTML兼容的电子邮件客户端,或将导出更改为纯文本格式。”;
}
foreach($to as$地址){
$mail->AddAddress($address);
}
$mail->Body=$the_message[$i];
$mail->Subject=$the_sub;
$mail->Send();
}
这过去工作得很好。现在,某些消息似乎永远不会发送。这似乎是一个数据问题(或者可能是PHPMailer向服务器发送行的方式?),但我无法确定为什么某些消息段总是被服务器拒绝

我从PHPMailer获得的错误消息如下:

SMTP错误:不接受数据

从PHP本身来看:

注意:fputs():发送31字节失败,错误号为104连接 第580行class.smtp.php中的对等方重置

以下是一段始终无法发送的HTML数据:


请注意,大小不是问题,我可以成功地发送比这个大得多的HTML消息。但是,当我发送多个段时,服务器永远不会接受这个段。

在这里,我以一种更理智的方式为您重新编写了它。您不需要每次循环都从头开始创建所有内容,只需更改正文并再次发送即可

<?php
require 'PHPMailerAutoload.php';
$the_message = array('Hello', 'there', 'Justin');
$to = array('tom@example.com', 'dick@example.net', 'harry@example.org');
$the_sub = 'Crazy subject';
$email_port = 25;
$from = 'justin@example.com';
$is_html = true;

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->Host = "localhost";
$mail->Port = $email_port;
$mail->Username = "my@email.com";
$mail->Password   = "mypassword";
$mail->SMTPAuth   = true;
$mail->From = $from;
$mail->FromName = "My Name";
$mail->Subject = $the_sub;
$mail->IsHTML($is_html);
$mail->WordWrap = 200;

if($is_html){
    $mail->AltBody = "To view the message, please use an HTML compatible email client, '.
     'or change your export to a plain text format.";
}
foreach($to as $address){
    $mail->AddAddress($address);
}
for($i=0; $i<count($the_message); $i++){
    $mail->Body = $the_message[$i];
    $mail->setWordWrap();
    $mail->Send();
}
在class.smtp.php的第51行中,我将常量
最大行长度
998更改为500。这允许我的所有电子邮件段通过

我仍然不确定问题是否出在我的SMTP服务器或PHPMailer上,我将不得不在其他地方测试它

编辑:使用Gmail的SMTP服务器进行测试,并保持998正常工作。这导致我假设SMTP中继服务器有时会根据长度拒绝数据


EDIT2:上述修复仍然失败。我更改了端口号并添加了SSL,它神奇地工作了。服务器问题不稳定…

$the_message
?$the_message是一个字符串数组,可以是HTML或纯文本。你复制并粘贴了程序中的代码吗?我忘了说-它是使用假邮件服务器测试邮件发送代码要容易得多。有一些链接来自。+1,用于不在循环中重新创建对象,这被低估了,我不知道从哪里开始;)我感谢您希望清理我的代码,但我认为这与此无关。我的代码已经发送了大量的电子邮件。问题要么是数据,要么是PHPMailer向服务器发送数据行的方式中存在一个模糊的错误。我正在查找一些显示问题的非私有测试数据,以便发布。请确保您使用的是最新的PHPMailer-至少5.2.8-因为它对SMTP进行了低级更改。另外,请确保尝试使用
$mail->SMTPDebug=3
获取详细的SMTP调试输出。这看起来很像是您的服务器造成的。您正在包装smtp应该已经允许的长行。奇怪。。。你的smtp有什么奇怪的规则吗?是的,肯定是服务器。我知道没有奇怪的规则。即使在这次改变之后,我也经历了一些失败。我更改了端口号并添加了SSL,到目前为止一切正常。shrughey,是时候问一个关于smtp服务器的问题了;)