为什么电子邮件不通过PHP发送,即使它被报告为已发送?

时间:2009-04-02 07:03:25

标签: php email cakephp

我正在尝试用PHP发送邮件。我在CakePHP中用于发送邮件的代码如下所示。我在网页上收到“简单电子邮件已发送”消息,但邮件未发送到我的收件箱。我错过了什么吗?

tosubjectlink字段中的值使用在用户界面中输入的值进行设置。

    $this->set('to',$this->params['form']['to']);
    $this->set('subject',$this->params['form']['subject']);
    $this->set('link',$this->params['form']['link']);
    $this->Email->to      = to;
    $this->Email->subject = subject;
    $this->Email->from    = 'someperson@somedomain.com';
    $this->Email->delivery= 'mail';
    $this->Email->sendAs='text';
    $this->Email->template = 'simple_message';
    //$this->Email->send(link);
    if ( $this->Email->send(link) ) {

        $this->Session->setFlash('Simple email sent');
    } else {
        $this->Session->setFlash('Simple email not sent');
    }

3 个答案:

答案 0 :(得分:2)

在Linux系统上,您可能已经安装了sendmail脚本,PHP将使用它。如果这是您所拥有的并且它不起作用,那么我会在您的Linux系统中查找邮件配置问题。

在Windows系统上,您需要配置希望PHP发送邮件的SMTP服务器。执行此操作的常规方法是在php.ini中。 The instructions for this are here

除非你设置了Email->,否则这对于CakePHP应该是相同的 - 它应默认为PHP使用的任何内容。

注意:如果您使用自己的Linux安装,可能只是您的ISP阻止了您的邮件服务器正在使用的端口25。在这种情况下,您需要配置linux以将电子邮件路由到ISP的电子邮件服务器。 Maybe this will help?

答案 1 :(得分:1)

什么时候'到'(第4行)是有效的目标电子邮件地址?

答案 2 :(得分:1)

您需要使用变量语法设置为“to”行和“subject”行。这些行应该是

$this->Email->to      = to;
$this->Email->subject = subject;

另外,我相信电子邮件组件中有一个名为error的属性(我目前在文档中找不到它)可以帮助您进行调试。这可能不完全正确;我将电子邮件组件与SMTP一起使用,并且有一个属性由名为smtpError的电子邮件组件设置。我相信有一个名为error的名称可以用来检查错误 - 它应该包含能告诉你问题所在的代码。

如果这是一个不正确的陈述,您可以在尝试发送电子邮件后始终执行var_dump( $this->Email );。这将转储对象的全部内容,因此您可以看到是否正确设置了属性,它可以帮助您找出错误属性的名称。