【问题标题】:CakePHP 2.0 says that email is invalidCakePHP 2.0 说电子邮件无效
【发布时间】:2014-08-05 14:01:47
【问题描述】:

我有一个组件,用于在 CakePHP 2.0 中发送电子邮件。在我将网站放在实时主机上之前,它运行良好。现在,我得到了错误:

无效的电子邮件:“admin@website.com”

显然,上面的电子邮件地址是有效的,所以我不知道为什么 Cake 会在这里抛出异常。请注意,无论我使用什么电子邮件地址,我都会得到相同的结果。

我使用的组件函数:

public function send($to, $subject, $body = null, $view = 'default', $vars = array(), $layout = 'layout'){
    try{
        $Email = new CakeEmail();
        $Email->config('default'); 
        $Email->template($view, $layout)->viewVars($vars);
        $Email->from(array(Configure::read('Site.email') => Configure::read('Site.name')));
        $Email->to($to);
        $Email->subject($subject);

        if(strlen(trim($body)) > 0){
            $Email->send($body);
        } else{
            $Email->send();
        }
    } catch(Exception $e){
        var_dump($e);
    }

}

在我的电子邮件配置文件中,我使用的是默认邮件传输。

更新:我似乎遇到了与person in this question 完全相同的问题。基本上,我得到了错误:

无效的电子邮件:“email@website.com” 发生内部错误。

【问题讨论】:

  • admin@website.com 是存储在$toConfigure::read('Site.email') 变量中的电子邮件吗?
  • @ArunJain admin@website.com 存储在Configure::read('Site.email'); 我手动添加了不同的电子邮件地址,但无济于事。我什至注释掉了CakeEmail::from 调用,只是给CakeEmail::to 调用一个例外,即myname@hotmail.com
  • 如果to 被注释掉时问题蔓延到to 行,那么我怀疑它发生得更早。注释掉模板行,看看代码是否正常运行。
  • @AgRizzo 我注释掉了模板和配置调用,只是想看看会发生什么。仍然收到来自电子邮件的无效错误。开始认为这可能与主机有关。
  • 听起来这很可能是您在电子邮件配置中设置的值。您是否检查过堆栈跟踪以找出这实际上源于何处?您是否使用自定义email pattern?你检查过内部使用的filter_var($email, FILTER_VALIDATE_EMAIL)是否成功验证了地址? ... ps,请务必提及您的 准确 CakePHP 版本!

标签: php cakephp cakephp-2.0


【解决方案1】:

好吧,我现在觉得有点傻:

基本上,我意识到我没有在电子邮件配置中设置内容类型。在我的本地机器上,我使用 Google 的电子邮件服务器发送 HTML 电子邮件。在生产服务器上,我使用的是常规邮件配置。不幸的是,我忘记为这种特定类型的邮件设置内容类型(而它是为 Gmail 配置设置的)。这里的问题是我的许多 HTML 电子邮件的布局和视图文件对于基于文本的电子邮件不存在。这似乎以某种形式破坏了 Cake,导致它抛出关于电子邮件无效的荒谬错误,即使它们是。

说实话,我偶然发现了这个。昨天,我上传了一些代码来尝试调试问题。令我惊讶的是,我的测试代码有效。然后我恍然大悟,在我的测试代码中,我是手动指定默认视图和布局。即我没有使用任何自定义视图。

为了验证我的理论,我确保 HTML 视图和布局也适用于基于文本的电子邮件。果然,我的邮件开始发送了。

从那时起,我将内容类型设置为 HTML,一切都按预期工作。

【讨论】:

    【解决方案2】:

    一些想法

    $Email->to(Sanitize::paranoid($to, array('@'));
    

    另外,确保 ->to() 函数实际上将 $to 设置为 ->to :)

    否则,设置如下:

    $Email->to = Sanitize::paranoid($to, array('@');
    

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2013-04-01
      相关资源
      最近更新 更多