许多人使用 phpmailer 和g-mail显示了类似的问题。这个问题略有不同,可能需要不同的答案。
phpmailer代码是相当标准的(下面)。我有一个循环,它遍历表中的一些数据,并为收件人构建自定义消息,为表中的每一行发送一条消息。发送邮件时,它成功完成了大约100个收件人中的75个,而在最后25个邮件中,它报告 SMTP连接()失败错误。这不会每次都发生,偶尔,脚本会顺利通过循环。
<?php
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
$mail->SMTPsecure = "ssl";
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Host = "smtp.gmail.com"; // sets the SMTP server
$mail->Port = 587; // set the SMTP port for the GMAIL server
$mail->Username = "xx"; // SMTP account username
$mail->Password = "xx"; // SMTP account password
$mail->SetFrom("xx@gmail.com");
$mail->isHTML(true);
$mail->CharSet = "utf-8";
$mail->Subject = $msgsubject;
$mail->AltBody = "Invitation";
do {
$membername = $row_musicians['name'];
$membernumber = $row_musicians['number'];
$emailaddress = $row_musicians['email'];
$rhdate = $row_musicians['rhdate'];
$mail->clearAttachments();
$mail->Body = 'Dear '.$membername.',
<p>'.$maintext.'</p>
';
// some more text using custom variables from database
// closing part of the message
$mail->Body .= '<p>'.nl2br($closing, false).'</p>
</body>
</html>';
$mail->AddAddress($emailaddress, $membername); // sending each message
sleep(1); // wait one second between sends, to avoid spam filters
echo '<br />
Recipient: '.$membername.' ('.$emailaddress.') -- ';
if(!$mail->Send()) {
echo "Mailer Error: <div style='color:#009999'>" . $mail->ErrorInfo." </div>";
} else {
echo "Message sent!";
}
$mail->ClearAddresses();
} while ($row_musicians = mysql_fetch_assoc($musicians));
mysql_free_result($musicians);
?>
答案 0 :(得分:0)
我建议您将代码基于the mailing list example provided with PHPMailer。
您正在做大部分事情 - 首先初始化PHPMailer并设置所有消息共有的属性,但缺少一个关键因素:
$mail->SMTPKeepAlive = true;
如果没有这个意味着它会关闭并重新打开每条消息的连接,并且您很可能会遇到连接速率限制。
您还使用Port= 587
和SMTPSecure = 'ssl'
的组合,这通常不起作用;切换到Port = 465
。
我还建议不要使用do/while
循环 - 如果您的数据库查询无法找到任何内容,它会失败,因为它经过了底层测试,因此总是会运行一次,即使有没有数据。请改用while
或foreach
循环。
邮件列表示例已经完成了所有这些事情。
最后一件事 - 如果这是您的所有代码,看起来您正在运行旧版本的PHPMailer,请获取最新版本。