malformed email subject header when subject > 75 c

2020-04-08 07:15发布

问题:

I'm getting some garble in my MIME headers when the subject is over 75 chars. When the line break is encoded in the header there is an extra line break that is invalid.

Some email gateways are bouncing the email with a "Malformed MIME field: ?= =?utf-8?Q?SUBJECT?=" error.

Does anyone have any experience with utf-8 problems sending emails with CodeIgniter?


-snip-
Return-Path: ***
Subject: =?utf-8?Q?SUBJECT_LINE    <--
?=                                 <-- Problem in Subject header
 =?utf-8?Q?SUBECT_LINE_2?=         <--
To: ***
Reply-To: ***
-snip-

Update: This has nothing to do with gmail smtp. I have rewritten the question in the hope that it will help someone out in the future.

回答1:

Apparently this is a known issue, caused by Subject lines > 75 chars.

http://codeigniter.com/forums/viewthread/154493/P15/#925385

The fix was to change the email config like this:

$config['newline'] = "\r\n";
$config['crlf']    = "\n"; 


回答2:

Since I myself had this exact problem I will share the solution here since the one shared does not work with version 2.2

Find this piece of code located in system/libraries/Email.php:365

public function subject($subject)
{
    $subject = $this->_prep_q_encoding($subject);
    $this->_set_header('Subject', $subject);
    return $this;
}

With this one

public function subject($subject)
{
    $subject = '=?UTF-8?B?'.base64_encode($subject).'?=';
    $this->_set_header('Subject', $subject);
    return $this;
}