Ver. 2.6.0.1 以下のメール送信で不具合が発見されました。

Ver. 2.6.0.1以下のa-blog cmsを利用したメール送信で、題名(subject)に余分なスペースが入ってしまう問題が発見されました。

対象

  • a-blog cms Ver. 2.6.0.1 以下
  • Subjectが ASCII文字コードで始まり、途中でマルチバイト文字が続く

「ABCあいうえお」 が 「ABC あいうえお」 に変換されてしまう。

対策

/php/Mail.php の 166行目付近の ”encode" メソッドと 363行目付近の "getHeader"メソッド を以下のように修正ください。

以下ソースでの修正箇所

  • 2, 3行目
  • 15 〜 21行目
  • 39行目
  • 47, 48行目
// 166行目付近
// function encode ( $str ) この行を削除
function encode ($str, $subject=false) // この行を追加
{
  $len      = mb_strlen($str, 'UTF-8');
  $encode   = '';
  $mbstack  = array();

  for ( $i=0; $len>$i; $i++ ) {
    $char   = mb_substr($str, $i, 1, 'UTF-8');
    $byte   = strlen(bin2hex($char));

    if ( 2 == $byte ) {
      if ( empty($mbstack) ) {
        // $encode .= $char; この行を削除
        // 以下5行を追加
        if ( $subject ) {
          $mbstack[] = $char;
        } else {
          $encode .= $char;
        }
      } else if ( !in_array($char, array(',', '@', '<', '>', '"', '(', ')')) ) {
....

// 363行目付近
function getHeader ( )
{
  $data   = '';

  foreach ( $this->_headers as $field => $header ) {
    $line   = '';

    if ( !isset($header['values']) || !isset($header['params']) ) {
      continue;
    }

    $values   = $header['values'];
    $params   = $header['params'];
    $subject  = $field === 'Subject'; // の行を追加

    // field
    $line   .= $field.':';

    // values
    foreach ( $values as $i => $value ) {
      $line   .= !empty($i) ? ' ,' : ' ';
      // $line   .= $this->encode(strval($value)); この行を削除
      $line   .= $this->encode(strval($value), $subject); // この行を追加
    }

この度はご迷惑をおかけしてしまい申し訳ございません。

今後ともa-blog cmsをお願い致します。