Email 发送电子邮件codeigniter函数返回“;收件人地址被拒绝:找不到域“;而不是假的
我用的是codeigniter。我测试发送电子邮件到一个错误的不远的地址,比如t@t.com. 我的代码只是controleur的一种方法,如下所示:Email 发送电子邮件codeigniter函数返回“;收件人地址被拒绝:找不到域“;而不是假的,email,codeigniter,error-handling,Email,Codeigniter,Error Handling,我用的是codeigniter。我测试发送电子邮件到一个错误的不远的地址,比如t@t.com. 我的代码只是controleur的一种方法,如下所示: function test() { $this->email->from('mymail@gmail.com'); $this->email->to(htmlentities("t@t.com")); $this->email->subject('test'); $this-&g
function test() {
$this->email->from('mymail@gmail.com');
$this->email->to(htmlentities("t@t.com"));
$this->email->subject('test');
$this->email->message("Just a test !");
$r = $this->email->send();
if (!$r)
echo "not sent, wrong email";
else
echo "sent";
}
基本上,send()函数返回true或false。但它不起作用!我收到的错误消息如下:
A PHP Error was encountered
Severity: Warning
Message: mail() [function.mail]: SMTP server response: 550 5.1.2 <t@t.com>: Recipient address rejected: Domain not found
Filename: libraries/Email.php
Line Number: 1540
not sent, wrong email
遇到PHP错误
严重性:警告
Message:mail()[function.mail]:SMTP服务器响应:550 5.1.2:拒绝收件人地址:找不到域
文件名:libraries/Email.php
行号:1540
未发送,错误的电子邮件
我有消息,所以send()函数回复false,但我也有错误消息,这是我不想要的
这是一个阻塞点。有人知道为什么send()函数不返回true或false回复吗
提前谢谢 我已经试过了,它正常工作,我收到:未发送,错误的电子邮件。 您使用的是什么版本的CI?确保这是最后一个 以防万一,检查CI文件夹中系统/库下的Email.php库
protected function _send_with_mail()
{
if ($this->_safe_mode == TRUE)
{
if ( ! mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str))
{
return FALSE;
}
else
{
return TRUE;
}
}
else
{
// most documentation of sendmail using the "-f" flag lacks a space after it, however
// we've encountered servers that seem to require it to be in place.
if ( ! mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str, "-f ".$this->clean_email($this->_headers['From'])))
{
return FALSE;
}
else
{
return TRUE;
}
}
}
检查内部的函数\u send\u with_mail()是否与上面的函数完全相同一个快速而肮脏的解决方法是在邮件函数前面加上“@”:
$r = @$this->email->send();
谢谢你的回复。我检查了这个函数,结果完全一样。我使用的是CI 2.0.3,所以不是最后一个,现在是2.1.0。我不明白为什么它对你有效,对我无效……你试过删除双引号和htmlentities函数吗?像这样:$this->email->to($this)t@t.com');我删除了双引号,它不起作用。所以,我删除了htmlentities,它不起作用。更准确地说,我收到了“未发送”消息,但在收到之前,我收到了如上所述的错误消息。当您将电子邮件发送到有效且存在的地址时,会发生什么情况?您是否也收到错误,或者是否已发送?如果它不工作,可能是服务器错误,在这种情况下,您应该与管理员联系。看看apache的错误日志(如果可以的话),当我发送到一个有效的电子邮件地址时,它工作得非常好。我在apache日志中没有看到任何东西。。。我考虑过服务器,但由于它适用于有效的电子邮件地址,我不认为在函数调用前预先加上“@”会禁用任何可能显示的错误。这被认为是不好的做法,因为它可以隐藏重要的错误,而且从性能角度看它很慢OK。谢谢我只会在本地开发中使用它,不会在prepod和prod环境中使用它。我在prepod上测试了它(没有@),send()函数的答案总是正确的,即使收件人邮件不存在。有没有办法知道电子邮件无效?使用smtp,当电子邮件地址不存在时,您不会收到错误消息。如果电子邮件具有有效的语法xxx@xxx.xxx代码成功地将邮件推送到套接字中而没有错误,那么它就被认为是成功的。发送代码仅负责将邮件发送到smtp服务器,仅此而已。如果要在邮件发送到smtp服务器后检查其状态,则需要创建一个脚本,该脚本连接到与发送电子邮件的帐户相关的imap或pop3服务器(例如:noreply@email.com)并检查未送达通知