在CakePHP中发送SMTP电子邮件时,没有设置主题

时间:2011-10-25 12:47:00

标签: email cakephp smtp cakephp-1.3

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

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

使用 smpt 时,CakePHP默认使用_mail()函数或使用_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();

电子邮件组件是标准的Cake 1.3电子邮件组件,我将此代码添加到send()函数的开头:

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我已经使用了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

解释这种行为可能是错误的。您可能遇到编码问题,是否在主题中使用普通字符?蛋糕中的一些功能在没有逃避它们的情况下死亡(我通常有西班牙语文本,所以我知道第一手)。您可以在创建标题的位置插入var_dump以查看它是如何进行的...

希望这可以帮助你,如果不发表评论:)

答案 2 :(得分:0)

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

由于Cakephp使用此库进行字符串处理,因此需要此库。

 yum install php-mbstring