SMTP错误:以下收件人失败:XXXX。

18

当我尝试从我的站点使用PHPmailer发送邮件时,我收到了以下错误:

SMTP错误:以下收件人失败:XXXX

我尝试将 $mail->SMTPAuth 设置为 false,但没有结果。 我还尝试更改邮件帐户的密码并在 sendmailfile.php 中更新密码,但仍然出现相同的问题。

两天前它还可以正常工作,现在我不知道为什么会出现这种情况。 由于也没有出现任何错误代码,我真的不知道从哪里开始,因为它之前是可以工作的...

有谁知道怎么解决吗?

    $mail = new PHPMailer();
    $mail->CharSet = 'UTF-8';
    $mail->ContentType = 'text/html';
    $mail->IsSMTP();
    $mail->Host = "HOST.COM";
    $mail->SMTPAuth = true;
    $mail->Username = "MAIL_TO_SEND_FROM"; 
    $mail->Password = "PASSWORD"; 
    $mail->From = "MAIL_TO_SEND_FROM";
    $mail->FromName = "NAME";
    $mail->AddAddress($safeMail);
    $mail->AddReplyTo("no-reply@example.COM", "No-reply");
    $mail->WordWrap = 50;
    $mail->IsHTML(true);
    $sub = "SUBJECT";
    mail->Subject = ($sub);

使用类似这样的方式获取更有用的错误信息:http://phpmailer.worxware.com/index.php?pg=exampleamail - user557846
现在我有更多的信息:SMTP -> 错误:服务器未接受 RCPT:550-验证失败,550-此处没有此用户,550 发件人验证失败。 SMTP 错误:以下收件人失败:XXXX。 - Markus
请从Github获取PHPMailer。该网站已经多年没有得到支持:https://github.com/PHPMailer/PHPMailer - Synchro
只是需要考虑的一点。我之前也因为密码错误遇到了同样的问题。 - Varshaan
9个回答

22
我遇到了同样的问题。当我注释掉下一行代码时,成功解决了这个问题。
 $mail->isSMTP(); 

注意到您已经找到了答案,然而或许这个解决方案可以帮助其他人解决问题。

这确实可以防止像RozzA在评论中提到的那样使用您的外部SMTP服务器。


1
@Jordy,我刚刚点赞了它,因为这是唯一对我有用的解决方案。 - Steve
2
这个程序相关的内容翻译成中文:此程序不使用外部SMTP,而是使用本地主机FYI - RozzA
@RozzA 猜想这正是大多数人在本地编码时所需要的。 - user443346

18

也许你的 class.phpmailer.php 文件已经损坏了。请从以下链接下载最新版本: https://github.com/PHPMailer/PHPMailer

$mail->SMTPDebug  = 1; // enables SMTP debug information (for testing)
                               // 1 = errors and messages
                               // 2 = messages only

希望是这样,我正在下载一个更新版本。 - Markus
更新了,仍然出现相同的错误...我想这必须是与服务器/邮件账户相关的。 - Markus
1
至少现在我知道这是与服务器/邮件帐户相关的问题。现在是时候联系我的托管公司的技术支持了。感谢您的时间!非常感激。 - Markus
该SourceForge项目已经多年没有得到支持,并且包含许多错误 - 我更正了PHPMailer当前主页的下载链接。另外,现在有更多的SMTP调试选项可以帮助解决这个问题。 - Synchro

3
这是来自您的SMTP服务器的限制。发送电子邮件是不断增长的互联网业务的重要组成部分。有时每天甚至每小时需要发送大量电子邮件。随之而来的是电子垃圾邮件问题的不断加剧,以及用户不断接收到的无数垃圾邮件。
最常见的限制包括:
每小时150封电子邮件; 24小时内1500封电子邮件; 每个消息50个收件人,其中每个收件人都计算为单独发送的电子邮件(例如,如果在单个消息中有50个收件人,则将计为50个已发送的消息);
一种解决方案是使用邮件列表,然后限制为24小时内1500封电子邮件。每小时发送的电子邮件数量没有限制,即您可以向具有多达1500个收件人的邮件列表发送电子邮件而不会出现问题。
如果达到每小时/每日限制,则在尝试发送进一步电子邮件时会收到此错误: 550-停止,您发送得太快了!
一旦过去了一个小时/一天,您就可以再次发送电子邮件。
为避免超过限制,您应该知道以下事项:
上述电子邮件限制适用于整个托管帐户,而不是单个邮箱。这意味着,如果您的任何一个邮箱超过允许的限制,您将无法从任何其他电子邮件帐户发送消息。 如果在任何时候收到上述错误消息,则强烈建议停止尝试从您的邮箱发送消息。如果您继续尝试,您的消息将留在邮件队列中,必须先清除该队列,然后服务器计时器才能重置并允许您再次发送电子邮件。

非常有用的提示。谢谢你,Zeke! - P.Belberov
那么,在这种情况下,SMTP服务器应该回复一些其他的消息,比如“超出配额”或类似的消息。 - tk_

2

尝试包含这个

$mail->SMTPDebug  = 1;

这导致以下结果:SMTP -> 错误:服务器未接受RCPT:550-验证失败,因为550此处没有此用户550发件人验证失败 SMTP错误:以下收件人失败:XXXXXXX - Markus
尝试将SMTPAuth设置为false。 - Vihanga Gamage
你尝试更新你的class.phpmailer.php文件了吗?也许你当前的文件已经损坏了。 - Vihanga Gamage
检查我的最新答案。 - Vihanga Gamage
至少现在我知道这是与服务器/邮件帐户有关的问题。是时候联系我的托管公司的支持团队了。感谢您的时间!非常感激。 - Markus
显示剩余2条评论

2

尝试将SMTPAuth设置为false。


1
我尝试了,但很遗憾没有帮助。 - Markus

0

为了跳过发送到无效地址的电子邮件,请使用try ... catch

$mail=new PHPMailer(true);
try {
$mail->CharSet = 'utf-8';  
$mail->isSMTP();
$mail->isHTML(true);
$mail->Host = 'smtp.yourhost.com';
$mail->Port = 25;
$mail->SMTPAuth = false;
$mail->Username = 'xxxx';
$mail->Password = 'xxxx';
$mail->SMTPSecure = 'tls';
$mail->SMTPDebug = 0;
$mail->MailerDebug = false;
$mail->setFrom($absender, $name);
$mail->addAddress($to);
$mail->Subject = $subject;
$mail->Body = $message_other_player;
}

$mail->send();
      // echo 'Message has been sent';
   } catch (Exception $e) {
     //  echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
   }

PHPMailer - 跳过发送到无效地址的电子邮件


0

请注意在您的代码行中,即:

$mail->Username = "MAIL_TO_SEND_FROM"; $mail->Password = "PASSWORD"; $mail->From = "MAIL_TO_SEND_FROM";

在第1行和第3行,您必须使用相同的电子邮件地址(不能使用不同的电子邮件地址),这将确保正常工作。我希望您正在使用不同的电子邮件地址,但是此电子邮件地址必须与用户名/密码匹配。


0

以下是有关 SMTP 验证的其他信息

PLAIN(使用 Base64 编码) LOGIN(使用 Base64 编码) 等等——你可以在这里查看http://en.wikipedia.org/wiki/SMTP_Authentication

对我来说,解决方案是将 PHPMailer 类的 SMTPAuth 设置为 true


0

有一个可能性稍低的问题。也许这个条件是由你的ISP设置的保护引起的,而且你说它两天前运行良好,也许那就是问题所在。尝试联系你的ISP。

或者可能是收件人/发件人电子邮件地址出了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接