0

今日は奇妙な問題に直面しました。電子メールを送信するときに、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

それが問題でした。基本機能を編集せずに、電子メールに長い件名を追加するにはどうすればよいですか? 言葉を壊すことなく、より長い主題をサポートするための最良の方法は何ですか? 助けてください、事前に感謝します。

4

1 に答える 1

1

メールの設定で$config['wrapchars'] = 100;、制限を増やすには: を書き、$config['wordwrap'] = TRUE;単語をラップするには : も書きます。それが役に立てば幸い。

于 2013-08-09T11:38:40.260 に答える