使用 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-&gt;email-&gt;newline = "\r\n";$this-&gt;email-&gt;crlf = "\n"; 我喜欢将它放在自己的配置文件中,但它们都可以工作。您还可以使用自己的单独配置参数创建电子邮件对象的单独实例:$email = new CI_Email(array('newline' =&gt; "\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 定期付款

无法使用 CodeIgniter 的电子邮件库发送电子邮件

CodeIgniter 无法使用 PHP mail() 发送电子邮件

电子邮件和密码的 CodeIgniter 验证规则

使用 codeIgniter 发送本地电子邮件

使用 Wamp 在 codeigniter 中发送电子邮件时出错