今日は奇妙な問題に直面しました。電子メールを送信するときに、Codeigniter Framework を使用しています。電子メールの件名が長い場合、言葉が途切れることがあります。たとえば、私の主題は次のとおりです。
This is a notification form test
しかし、送信されたメールでは次のように表示されます。
This is a notification form t est
ご覧test
のとおりですt est
。私はこの機能を検索して見つけました:
private function _prep_q_encoding($str, $from = FALSE)
{
$str = str_replace(array("\r", "\n"), array('', ''), $str);
// Line length must not exceed 76 characters, so we adjust for
// a space, 7 extra characters =??Q??=, and the charset that we will add to each line
$limit = 75 - 7 - strlen($this->charset);
// these special characters must be converted too
$convert = array('_', '=', '?');
if ($from === TRUE)
{
$convert[] = ',';
$convert[] = ';';
}
$output = '';
$temp = '';
for ($i = 0, $length = strlen($str); $i < $length; $i++)
{
// Grab the next character
$char = substr($str, $i, 1);
$ascii = ord($char);
// convert ALL non-printable ASCII characters and our specials
if ($ascii < 32 OR $ascii > 126 OR in_array($char, $convert))
{
$char = '='.dechex($ascii);
}
// handle regular spaces a bit more compactly than =20
if ($ascii == 32)
{
$char = '_';
}
// If we're at the character limit, add the line to the output,
// reset our temp variable, and keep on chuggin'
if ((strlen($temp) + strlen($char)) >= $limit)
{
$output .= $temp.$this->crlf;
$temp = '';
}
// Add the character to our temporary line
$temp .= $char;
}
$str = $output.$temp;
// wrap each line with the shebang, charset, and transfer encoding
// the preceding space on successive lines is required for header "folding"
$str = trim(preg_replace('/^(.*)$/m', ' =?'.$this->charset.'?Q?$1?=', $str));
return $str;
}
からの呼び出し
public function subject($subject)
{
$subject = $this->_prep_q_encoding($subject);
$this->_set_header('Subject', $subject);
return $this;
}
最初の関数では、次のように述べています。
// Line length must not exceed 76 characters
それが問題でした。基本機能を編集せずに、電子メールに長い件名を追加するにはどうすればよいですか? 言葉を壊すことなく、より長い主題をサポートするための最良の方法は何ですか? 助けてください、事前に感謝します。