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をお願い致します。