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

问题描述 投票:0回答:2

最近,偶然地,我发现无法将电子邮件发送到服务器以外的其他来源(我已经在同一服务器上安装了本地电子邮件地址的情况下进行了测试)。这是我的代码,因此无法发送到(例如)gmail或yahoo。

$receiver = $emailadr;
$subj     = 'Auth';
$msg      = 'Thank you!';
$header = 'From: [email protected]' . "\r\n" . 
'Reply-To: [email protected]' . "\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

php email plesk
2个回答
3
投票

错误消息很清楚This mail server requires authentication

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

http://phpmailer.worxware.com/index.php?pg=tutorial#2

此外,您也可以尝试一些http://sendgrid.com/之类的云邮件服务,它们具有不错的PHP API库。


1
投票

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

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

  • [传入:从[email protected]到@ somedomain.com的邮件。通常只接受这些邮件。
  • [外发:从@ somedomain.com发送到[email protected]的邮件。如果原始IP地址在本地网络(或Web服务器)中,则接受邮件。 这就是您想要的
  • 内部:从@ somedomain.com到@ somedomain.com的邮件。如果您将消息发送给自己,那是您的另一种选择。您在这里收到邮件的最高更改
  • 中继:从[email protected]发送到[email protected]的邮件。这就是您的服务器认为您正在做的事情。中继邮件通常被拒绝通过身份验证的用户除外,因为它通常是垃圾邮件(这就是错误消息中告诉您的内容)。不幸的是,标准的PHP sendmail函数不支持身份验证。因此,您需要将发件人地址添加到邮件服务器的白名单中,或(更轻松:)将其更改为可接受的内部地址,这将根据接收者地址将您的邮件更改为外发或内部邮件。
© www.soinside.com 2019 - 2024. All rights reserved.