Php mail():SMTP服务器响应:503尝试发送到非本地电子邮件地址时,此邮件服务器需要身份验证

Php mail():SMTP服务器响应:503尝试发送到非本地电子邮件地址时,此邮件服务器需要身份验证,php,email,plesk,Php,Email,Plesk,就在最近,出于偶然,我发现我无法将电子邮件发送到服务器之外的其他来源(我一直在测试,在同一台服务器上安装了本地电子邮件地址)。这是我的代码,我无法发送到(例如)gmail或yahoo $receiver = $emailadr; $subj = 'Auth'; $msg = 'Thank you!'; $header = 'From: sometestmail@somedomain.com' . "\r\n" . 'Reply-To: sometestmail@somedom

就在最近,出于偶然,我发现我无法将电子邮件发送到服务器之外的其他来源(我一直在测试,在同一台服务器上安装了本地电子邮件地址)。这是我的代码,我无法发送到(例如)gmail或yahoo

$receiver = $emailadr;
$subj     = 'Auth';
$msg      = 'Thank you!';
$header = 'From: sometestmail@somedomain.com' . "\r\n" . 
'Reply-To: sometestmail@somedomain.com' . "\r\n" . 
'X-Mailer: PHP/' . phpversion() . "\r\n" . 'Content-type: text/html; charset=iso-8859-1';
mail($receiver, $subj, $msg, $header);
当(尝试)发送时,会出现以下情况:

:mail():SMTP服务器响应:503尝试发送到非本地电子邮件地址时,此邮件服务器需要身份验证。请检查邮件客户端设置或与管理员联系,以验证是否为此服务器定义了域或地址


我使用的是Plesk 12.5,看起来像是邮件服务器的问题。你的代码在共享主机上?您的提供商可能有反垃圾邮件配置(希望如此)。您必须确保您的发件人地址存在。对于测试,如果您将消息发送给自己(如果您还没有),这也很有帮助,这样可以有更多的机会工作,然后您可以检查邮件标题

在一般配置的电子邮件服务器上,有四种邮件通信方式:(我假设您的服务器运行somedomain.com并提供@somedomain.com邮件)

  • 传入:从not-@somedomain.com到@somedomain.com的邮件。这些邮件通常只是简单地接受
  • 发送:邮件从@somedomain.com发送至not---@somedomain.com。如果原始IP地址位于本地网络(或Web服务器)中,则可以接受这些邮件这就是你想要的
  • 内部:邮件从@somedomain.com发送至@somedomain.com。如果你将信息发送给自己,这是你的另一个选择。这是邮件到达时的最高找零
  • 中继:从not--@somedomain.com到not--@somedomain.com的邮件。这就是服务器认为您正在做的事情。除了经过身份验证的用户,转发邮件通常被拒绝,因为它通常是垃圾邮件(这是它在错误消息中告诉您的)。不幸的是,标准的PHP sendmail函数不支持身份验证。因此,您需要将发件人地址添加到邮件服务器的白名单中,或者(更简单:)将其更改为可接受的内部地址,从而根据收件人地址将您的邮件更改为传出或内部邮件

    • 看起来像是邮件服务器的问题。你的代码在共享主机上?您的提供商可能有反垃圾邮件配置(希望如此)。您必须确保您的发件人地址存在。对于测试,如果您将消息发送给自己(如果您还没有),这也很有帮助,这样可以有更多的机会工作,然后您可以检查邮件标题

      在一般配置的电子邮件服务器上,有四种邮件通信方式:(我假设您的服务器运行somedomain.com并提供@somedomain.com邮件)

      • 传入:从not-@somedomain.com到@somedomain.com的邮件。这些邮件通常只是简单地接受
      • 发送:邮件从@somedomain.com发送至not---@somedomain.com。如果原始IP地址位于本地网络(或Web服务器)中,则可以接受这些邮件这就是你想要的
      • 内部:邮件从@somedomain.com发送至@somedomain.com。如果你将信息发送给自己,这是你的另一个选择。这是邮件到达时的最高找零
      • 中继:从not--@somedomain.com到not--@somedomain.com的邮件。这就是服务器认为您正在做的事情。除了经过身份验证的用户,转发邮件通常被拒绝,因为它通常是垃圾邮件(这是它在错误消息中告诉您的)。不幸的是,标准的PHP sendmail函数不支持身份验证。因此,您需要将发件人地址添加到邮件服务器的白名单中,或者(更简单:)将其更改为可接受的内部地址,从而根据收件人地址将您的邮件更改为传出或内部邮件

      错误消息非常清楚
      此邮件服务器需要身份验证

      您可以在Plesk中创建邮件用户,并使用以下PHP类发送带有身份验证的邮件:


      您还可以尝试一些云邮件服务,就像它们有漂亮的PHP API库一样。

      错误消息非常清楚
      此邮件服务器需要身份验证

      您可以在Plesk中创建邮件用户,并使用以下PHP类发送带有身份验证的邮件:


      您还可以尝试一些云邮件服务,比如它们有很好的PHP API库。

      这样您就知道问题出在哪里了。你希望我们如何帮助你?我觉得这是不言自明的。你想让我们怎么办?这样你就知道问题出在哪里了。你希望我们如何帮助你?我觉得这是不言自明的。你想让我们怎么办?所以这封邮件一定不存在?@Xi先生,我不明白这个问题。PHP使用服务器上的sendmail命令发送邮件。服务器有一个电子邮件服务器,此邮件服务器返回的答案是“503此邮件服务器在尝试发送到非本地电子邮件地址时需要身份验证”。消息告诉您(自由翻译)消息不被接受,因为发件人和/或收件人地址不被接受。这两个地址都是PHP的一部分command@DanielAlder:那是不正确的。消息说服务器需要身份验证,这意味着服务器需要身份验证。就这么简单。这是一种基本且常见的安全措施,可防止SMTP服务器被用作发送垃圾邮件的开放中继。您必须通过身份验证才能使用它。您必须是在该系统上经过身份验证的用户,才能被信任发送邮件。它与发件人地址无关。@LightnessRacesinOrbit半对:它说您需要身份验证才能发送到非本地电子邮件地址。那是因为它认为邮件已经来了