使用 codeigniter 电子邮件库的主题 > 75 个字符时格式错误的电子邮件主题标头
Posted
技术标签:
【中文标题】使用 codeigniter 电子邮件库的主题 > 75 个字符时格式错误的电子邮件主题标头【英文标题】:malformed email subject header when subject > 75 chars using codeigniter email lib 【发布时间】:2012-01-11 03:50:19 【问题描述】:当主题超过 75 个字符时,我的 MIME 标题中出现了一些乱码。 当换行符在标头中编码时,会有一个额外的无效换行符。
一些电子邮件网关在退回电子邮件时出现“Malformed MIME field: ?= =?utf-8?Q?SUBJECT?=" 错误。
有没有人在使用 CodeIgniter 发送电子邮件时遇到 utf-8 问题?
-snip-
Return-Path: ***
Subject: =?utf-8?Q?SUBJECT_LINE <--
?= <-- Problem in Subject header
=?utf-8?Q?SUBECT_LINE_2?= <--
To: ***
Reply-To: ***
-snip-
更新: 这与 gmail smtp 无关。我已经重写了这个问题,希望它可以帮助将来的人。
【问题讨论】:
【参考方案1】:显然这是一个已知问题,由主题行 > 75 个字符引起。
http://codeigniter.com/forums/viewthread/154493/P15/#925385
解决方法是像这样更改电子邮件配置:
$config['newline'] = "\r\n";
$config['crlf'] = "\n";
【讨论】:
这解决了我的问题。不过,我使用了内联配置字符串:$this->email->newline = "\r\n";
和 $this->email->crlf = "\n";
我喜欢将它放在自己的配置文件中,但它们都可以工作。您还可以使用自己的单独配置参数创建电子邮件对象的单独实例:$email = new CI_Email(array('newline' => "\r\n"));
CodeIgniter 将换行符放在多字节字符中间也存在问题。看github.com/EllisLab/CodeIgniter/issues/1498
哈哈,我正在处理一些遗留系统,我不知道 >75 问题,感谢您的回答【参考方案2】:
由于我自己遇到了这个确切的问题,我将在这里分享解决方案,因为共享的解决方案不适用于 2.2 版
在 system/libraries/Email.php:365
中找到这段代码public function subject($subject)
$subject = $this->_prep_q_encoding($subject);
$this->_set_header('Subject', $subject);
return $this;
有了这个
public function subject($subject)
$subject = '=?UTF-8?B?'.base64_encode($subject).'?=';
$this->_set_header('Subject', $subject);
return $this;
【讨论】:
天哪,我想我爱你 - 我已经花了 4 个小时敲打我的头,希望我能给你 10 票!以上是关于使用 codeigniter 电子邮件库的主题 > 75 个字符时格式错误的电子邮件主题标头的主要内容,如果未能解决你的问题,请参考以下文章
使用 codeigniter ci_marchant_Lib 库的 PayPal 定期付款