【问题标题】:When sending SMTP email in CakePHP no subject is set在 CakePHP 中发送 SMTP 电子邮件时未设置主题
【发布时间】:2011-12-14 22:12:00
【问题描述】:

在我将我的 CakePHP 应用程序切换为使用 SMTP 发送电子邮件后(使用电子邮件组件)所有发送的电子邮件现在都没有主题了。

他们以前总是有一个主题,而现在其他一切都有效,只是没有主题。我联系了我正在使用的 smtp 服务器 (SendGrid) 的支持人员,他们向我保证电子邮件中不包含任何主题标头。

CakePHP 默认使用_mail() 函数,使用smpt 时使用_smtp() 函数。

我查看了代码,我可以看到 _mail 函数在哪里使用了主题,但是我没有看到 _smtp_smtpSend 在任何地方使用 $this->subject。我错过了什么吗?

我需要做什么才能让主题发挥作用?


更新 添加代码

这就是我从控制器发送电子邮件的方式:

$this->Email->to = $data['Order']['user_email'];
$this->Email->subject = 'Your Order Has Shipped';
$this->Email->template = 'order_shipped';
$this->Email->layout = 'sussex';
$this->Email->sendAs = 'html';

$this->Email->send();

Email 组件只是标准的 Cake 1.3 Email 组件,我在send() 函数的开头添加了这段代码:

$this->smtpOptions = array(
  'port'=>'587', 
  'timeout'=>'30',
  'host' => 'smtp.sendgrid.net',
  'username'=>'my_user',
  'password'=>'*******',
  'client' => 'www.example.com'
);
$this->delivery = 'smtp';

【问题讨论】:

  • 你能添加发送电子邮件的代码吗?仅供参考 cakephp 在电子邮件组件的 _createHeader 方法中为 smtp 添加主题。
  • @Shrey Gupta 电子邮件组件中有很多代码,你想看哪一部分....或者只是我发送电子邮件的控制器中的部分?
  • 您的代码仅用于发送电子邮件,它使用电子邮件组件。
  • @Shrey Gupta 我已经添加了代码。

标签: email cakephp smtp cakephp-1.3


【解决方案1】:

在上面提到的代码中,您在电子邮件组件的发送方法中使用,必须在调用 $this->__createHeader(); 之前使用。由于 smtp 传递,主题设置在 __createHeader 方法中必须在 __createHeader 调用之前放置 $this->delivery = 'smtp';

【讨论】:

    【解决方案2】:

    我已经使用了带有 smtp 的电子邮件组件(使用 gmail),它工作正常,可以正确设置主题和所有内容。

    我是这样用的:

        $this->Email->reset();
        $this->Email->smtpOptions = $options;
        $this->Email->delivery = 'smtp';
        $this->Email->from = $from;
        $this->Email->to = $to;
        $this->Email->subject = $tittle;
        if ( $this->Email->send($message) ) {
            return true;
        } else {
            return false;
        }
    

    $options 是

        $options = array(
            'port'=>'465',
            'timeout'=>'30',
            'host'=>'ssl://smtp.gmail.com',
            'username'=>'yourAccount@gmail.com',
            'password'=>'yourPassword'
        );
    

    _smtp 函数也使用createHeader,它使用了主题。

    解释这种行为可能有什么问题。您可能有一些编码问题,您是否在主题中使用普通字符? cake 中的一些功能没有转义就死掉了(我通常有西班牙语文本,所以我是第一手知道的)。您可以在它创建标头的位置插入一个 var_dump 以查看它是如何做到的...

    希望这对您有所帮助,如果没有发表评论:)

    【讨论】:

      【解决方案3】:

      我在调查后也遇到了同样的问题,我发现服务器上没有安装php mbstring。安装 PHP Mbstring 后,问题就解决了,我在电子邮件中得到了主题。

      因为 Cakephp 使用这个库来处理字符串,所以它需要这个库。

       yum install php-mbstring 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 2014-08-09
        • 2018-12-08
        相关资源
        最近更新 更多