我将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';
答案 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