发送邮件到本地邮件服务器 - “SENT:550地址无效。”

8
我正在尝试向我的本地邮件服务器发送邮件。我使用 hMailServer 作为邮件服务器,并按照此处提及的配置进行了配置:

在 XAMPP 上设置本地邮件(SMTP、POP3、IMAP)服务器

但是当我尝试发送邮件时,我收到以下错误:

( ! ) Warning: mail() [function.mail]: SMTP server response: 550 The address is not valid. in C:\wamp\www\kariyersitem\register.php on line 161

邮件服务器的日志文件指出以下错误:
"DEBUG" 3108    "2012-01-08 18:04:24.447"   "Creating session 14"  
"SMTPD" 3108    14  "2012-01-08 18:04:24.448"   "127.0.0.1" "SENT: 220 localhost ESMTP"  
"SMTPD" 1728    14  "2012-01-08 18:04:24.454"   "127.0.0.1" "RECEIVED: HELO olcay-pc"  
"SMTPD" 1728    14  "2012-01-08 18:04:24.455"   "127.0.0.1" "SENT: 250 Hello."  
"SMTPD" 3108    14  "2012-01-08 18:04:24.457"   "127.0.0.1" "RECEIVED: MAIL FROM:<you@yourdomain>"  
"SMTPD" 3108    14  "2012-01-08 18:04:24.458"   "127.0.0.1" "SENT: 550 The address is not valid."  
"SMTPD" 2040    14  "2012-01-08 18:04:24.459"   "127.0.0.1" "RECEIVED: QUIT"  
"SMTPD" 2040    14  "2012-01-08 18:04:24.460"   "127.0.0.1" "SENT: 221 goodbye"  
"DEBUG" 3392    "2012-01-08 18:04:24.461"   "Closing TCP/IP socket"  
"DEBUG" 3392    "2012-01-08 18:04:24.462"   "Ending session 14"  

我已经检查了地址,确定它是正确的。
有人能告诉我问题出在哪里吗?

这是我的邮件代码:

$to      = $frm_kadi;  
$subject = $site_title.' Üyelik Aktivasyonu';  
$message = 'hello';  
$headers = 'From: '.$contact."\r\n".'Reply-To: '.$contact."\r\n".'X-Mailer: PHP/'.phpversion();  
$mresult = mail($to, $subject, $message, $headers);  

我已经检查了$contact,在我的config.php文件中它被写作olcayertas@gmail.com。在发送邮件之前,我使用echo函数调试了我的代码,并且是正确的。

目前我的$contact变量被设置为:

$contact = "olcayertas@gmail.com";

更新 1

按照 @Jared Farrish 的建议,在 php.ini 中将 sendmail_from 设置为 olcayertas@gmail.com 解决了第一个问题。但现在我有一个新问题:

"DEBUG" 3108    "2012-01-08 22:15:28.497"   "Creating session 24"  
"SMTPD" 3108    24  "2012-01-08 22:15:28.498"   "127.0.0.1" "SENT: 220 localhost ESMTP"  
"SMTPD" 3108    24  "2012-01-08 22:15:28.499"   "127.0.0.1" "RECEIVED: HELO olcay-pc"  
"SMTPD" 3108    24  "2012-01-08 22:15:28.500"   "127.0.0.1" "SENT: 250 Hello."  
"SMTPD" 4380    24  "2012-01-08 22:15:28.511"   "127.0.0.1" "RECEIVED: MAIL FROM:<olcayertas@gmail.com>"  
"DEBUG" 4380    "2012-01-08 22:15:28.542"   "Total spam score: 0"  
"SMTPD" 4380    24  "2012-01-08 22:15:28.547"   "127.0.0.1" "SENT: 250 OK"  
"SMTPD" 3108    24  "2012-01-08 22:15:28.548"   "127.0.0.1" "RECEIVED: RCPT TO:<olcayertas>"  
"SMTPD" 3108    24  "2012-01-08 22:15:28.548"   "127.0.0.1" "SENT: 550 A valid address is required."  
"SMTPD" 2040    24  "2012-01-08 22:15:28.552"   "127.0.0.1" "RECEIVED: QUIT"  
"DEBUG" 2040    "2012-01-08 22:15:28.552"   "Deleting message file"  
"SMTPD" 2040    24  "2012-01-08 22:15:28.552"   "127.0.0.1" "SENT: 221 goodbye"  
"DEBUG" 4380    "2012-01-08 22:15:28.555"   "Closing TCP/IP socket"  
"DEBUG" 4380    "2012-01-08 22:15:28.556"   "Ending session 24"  

看起来它没有完全获取目标地址。我正在尝试给自己发送邮件,但只获得了用户名olcayertas而缺少域@gmail.com更新2: 我已经解决了第二个问题,那是我的错误。 更新3: 现在我遇到这个错误:
"SENT: 530 SMTP authentication is required."

但是我已经在设置->协议->SMTP->电子邮件传递->SMTP中继下填写了SMTP身份验证设置。服务器需要身份验证使用SSL选项已被勾选。

更新4

设置->高级->IP范围->我的计算机中禁用hMailServer的要求SMPTP身份验证选项解决了SMTP身份验证问题。


请告诉我们您对 mail() 函数的参数设置。 - Jonathon
3
谢谢你在针对 PHP 相关问题时查看错误日志。+1 - hakre
你正在使用哪些实际的SMTP设置(在合理范围内)? - Jared Farrish
无论你的问题是什么,我没有看到它(而且 hMailServer 源代码下载不可用,所以我无法查看)。唯一的另一个试探是电子邮件地址本身是否包含像你的名字一样的某些特殊字符,但你在源文件中没有看到它们。我建议使用一个干净的“新”电子邮件地址尝试另一个设置。从头开始获取一个工作并进行比较。此外,您可以在 hMailServer 论坛上提问。 - Jared Farrish
2
这可能有所帮助:http://www.hmailserver.com/forum/viewtopic.php?f=6&t=4685 - Jared Farrish
显示剩余4条评论
5个回答

11
为了解决 "SENT: 550550 The address is not valid." 问题,您需要在 "php.ini" 文件中将 "sendmail_from" 设置为一个有效的电子邮件地址。
为了解决 "SENT: 530 SMTP authentication is required" 问题,请打开 hMailServer 管理员界面。转到 "设置->高级->IP 范围->我的计算机"。禁用 "需要 SMTP 认证" 部分下的所有选项。

530 SMTP身份验证:它可以工作,但必须更改Internet设置而不是计算机设置,才能从本地主机发送电子邮件到Web服务器的同一域。必须取消选中“本地到本地电子邮件地址”中的“要求SMTP身份验证”。我的php.ini中的默认发件人是admin@webserv.com。它使我能够向例如notify@webserv.com发送电子邮件。 - Codebeat
太棒了,我使用hmailserver在我的wamp本地主机上发送电子邮件。 - Charlesliam

3

看起来你正在以这种方式发送“发件人”电子邮件(From-Header):you@yourdomainyourdomain 是一个无效的域名。请将其更改为有效的电子邮件地址。


1

您正在使用you@yourdomain作为发件地址,但服务器拒绝它。
请改用一个真实的地址。


我已经检查过了。 在我的config.php文件中,它写为olcayertas@gmail.com。 在发送邮件之前,我使用echo函数调试我的代码并且是正确的。 - Olcay Ertaş
好的,但是在发送消息时有两个发件人地址:一个是头部的发件人地址,SMTP不使用它;另一个是信封的发件人地址,SMTP在MAIL FROM命令中使用它。正是后者给你带来了麻烦。使用sendmail时,可以通过-f选项传递信封发件人地址。这种选项可以在_additional_parameters_参数中传递给php mail()函数。 - Daniel Vérité

0
请记住,每次在更改php.ini后,您都应该重新启动wamp(!!!)以读取更新的php.ini。
附注:在使用mail()之前,您可能需要在您的php脚本中使用ini_set("sendmail_from", "your_user@gmail.com");。

0

我猜测$contact<olcayertas@gmail.com>,这可能导致了问题。尝试将其更改为olcayertas@gmail.com


尝试一下:$contact = '"Olcay Ertaş" <olcayertas@gmail.com>'?(值得一试) - Jonathon
sendmail_from 在 php.ini 中设置了吗? - Jonathon

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