Zend_Mail发邮件标题乱码

一 。 今天试了一下,用Zend framework 提供的Zend _mail发邮件,发送成功,可是标题中文乱码...

        google了一下,发现有人说长度太长就会乱码...

        zf的issue tracker上已经有report...我还没有尝试上面有人提供的方法...等一下尝试一下...但是我先记录一下:

In Zend _Mail::_encodeHeader() and Zend _Mail::setSubject().

Now, it is:
=?utf-8?Q?mikespook=20=E9=82=80=E8=AB=8B=E6=82=A8=E9=80=B2=E5=85=A5=20ecbattle.net=20=E7=?=9A=84=E4=B8=96=E7=95=8C=E5=85=A7?=

But should be:
=?utf-8?Q?mikespook=20=E9=82=80=E8=AB=8B=E6=82=A8=E9=80=B2=E5=85=A5=20ecbattle.net=20=E7=?=
=?utf-8?Q?9A=84=E4=B8=96=E7=95=8C=E5=85=A7?=

And if I modify the code in Zend /Mail.php line: 392.

protected function _encodeHeader($value)
{
if (Zend _Mime::isPrintable($value)) { return $value; } else { $quotedValue = Zend _Mime::encodeQuotedPrintable($value); $quotedValue = str_replace(array('?', ' '), array('=3F', '=20'), $quotedValue); return '=?' . $this->_charset . '?Q?' . $quotedValue . '?='; }
}
to:
protected function _encodeHeader($value)
{
if (Zend _Mime::isPrintable($value)) { return $value; } } else { $quotedValue = Zend _Mime::encodeQuotedPrintable($value, 200); $quotedValue = str_replace(array('?', ' '), array('=3F', '=20'), $quotedValue); return '=?' . $this->_charset . '?Q?' . $quotedValue . '?='; }
}

there will be no problem. but if it is longer than 200, the subject will be showed hash.

        此外,对于text文本的邮件,可能也需要设置charset/encoding,否则邮件body部分也有可能是乱码...如:
          $mail->setBodyText('测试邮件。','utf-8',Zend _Mime::ENCODING_BASE64);

二。

     //从数据库中得到邮件服务器信息
        $mailInfo = $this->_getmail->getMail();
        //配置邮件服务设置信息
        $config = array (
            'auth' => 'login',
            'username' => $mailInfo['emailUsername'],
            'password' => $mailInfo['emailPassword'],
            'port' => $mailInfo['smtpPort']
        );
        $transport = new Zend_Mail_Transport_Smtp($mailInfo['smtpAddress'], $config);
        //初始编码设置
        $mail = new Zend_Mail('UTF-8');
        //处理body乱码,过滤html        
        $mail->setBodyHtml($data['content'],'utf-8',Zend_Mime::ENCODING_BASE64);
        $mail->setFrom($mailInfo['emailUsername'], $data['addressor']);
        foreach ($data['mail'] as $key => $value) {
            $mail->addTo($data['mail'][$key], 'Some Recipient');
        }
        $mail->setSubject($data['mailTitle']);
        $mail->send($transport);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值