【问题标题】:malformed email subject header when subject > 75 chars using codeigniter email lib使用 codeigniter 电子邮件库的主题 > 75 个字符时格式错误的电子邮件主题标头
【发布时间】: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 无关。我已经重写了这个问题,希望它可以帮助将来的人。

【问题讨论】:

    标签: email codeigniter utf-8 mime


    【解决方案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 票!
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2014-01-06
    • 2013-08-11
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多