Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 发送电子邮件codeigniter函数返回“;收件人地址被拒绝:找不到域“;而不是假的_Email_Codeigniter_Error Handling - Fatal编程技术网

Email 发送电子邮件codeigniter函数返回“;收件人地址被拒绝:找不到域“;而不是假的

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

我用的是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->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)并检查未送达通知