使用PHP函数发送邮件时中继不允许的消息

时间:2011-05-23 11:17:37

标签: php email wamp emailrelay

我正在使用wamp服务器并尝试使用PHP函数mail('me@ISPdomain.com','my subject','my body');发送电子邮件,
使用php.ini中的以下设置:

SMTP = 'ISP's SMTP server'  
smtp_port = 25 

但是我收到了消息:

Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Relaying not allowed. Please use SMTP Authentication.

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

您的ISP的邮件服务器不允许“中继”,这是一件好事,否则他们最终会移动大量的垃圾邮件。

http://en.wikipedia.org/wiki/Open_mail_relay

  

开放邮件中继是一种SMTP服务器,其配置方式允许Internet上的任何人通过它发送电子邮件,而不仅仅是发往或来自已知用户的邮件。这曾经是许多邮件服务器的默认配置;事实上,这是互联网最初建立的方式,但开放邮件中继由于被垃圾邮件发送者和蠕虫利用而变得不受欢迎。许多中继被关闭,或被其他服务器放在黑名单上。

为了能够利用ISP的邮件服务器,您需要先使用用户名和密码进行身份验证。

你可以尝试一下这样的php.ini行:

SMTP = 'username:password@ISP's SMTP server address'

这不保证能够正常工作,因为此选项需要在邮件服务器上设置非标准修改或选项。

您的另一个选择是只运行不需要身份验证的本地代理邮件服务器,然后将邮件直接发送到收件人的邮件服务器,或通过经过身份验证的邮件服务器连接。

我不知道建议与WampServer一起使用,但WampDeveloper Pro推荐的本地邮件服务器是:

  1. hmailserver
  2. mailenable
  3. Smartermail
  4. 您应该看到每个功能和要求。我相信其中一个可以干扰MySQL(因为安装程序会尝试放置它自己的副本)。

答案 1 :(得分:1)

ISPdomain.com SMTP服务器可能会抱怨您的连接对于其反垃圾邮件规则来说太基本了。

答案 2 :(得分:1)

如错误消息所示,您需要对该服务器使用SMTP身份验证。

使用PHP的内置SMTP功能无法做到这一点。

最简单的方法是使用预制的邮件程序类SwiftmailerHere是一个如何做到的例子。