diff -ur roundcubemail-1.0.1-ORIGINAL/program/lib/Roundcube/rcube_charset.php roundcubemail-1.0.1-ISO2022JP/program/lib/Roundcube/rcube_charset.php
--- roundcubemail-1.0.1-ORIGINAL/program/lib/Roundcube/rcube_charset.php	2014-05-09 23:08:53.000000000 +0900
+++ roundcubemail-1.0.1-ISO2022JP/program/lib/Roundcube/rcube_charset.php	2014-06-24 22:23:47.000000000 +0900
@@ -177,6 +177,34 @@
         static $mbstring_sch    = null;
         static $conv            = null;
 
+        if (strtolower($from) == 'iso-2022-jp') {
+             $from = 'ISO-2022-JP-MS';
+        }
+
+        // For Unicode WAVE DASH problem (Change Microsoft style mapping to standard mapping)
+        if (strtolower($to) == 'iso-2022-jp'|| strtolower($to) == 'euc-jp') {
+            mb_substitute_character(0x003F);
+            $StdMapArr = array(
+                mb_convert_encoding(pack('H*', '00A2'), $from, 'UCS-2'), // CENT SIGN
+                mb_convert_encoding(pack('H*', '00A3'), $from, 'UCS-2'), // POUND SIGN
+                mb_convert_encoding(pack('H*', '00AC'), $from, 'UCS-2'), // NOT SIGN
+                mb_convert_encoding(pack('H*', '2016'), $from, 'UCS-2'), // DOUBLE VERTICAL LINE
+                mb_convert_encoding(pack('H*', '2212'), $from, 'UCS-2'), // MINUS SIGN
+                mb_convert_encoding(pack('H*', '301C'), $from, 'UCS-2')  // WAVE DASH
+            );
+            mb_substitute_character('none');
+            $MsMapArr = array(
+                mb_convert_encoding(pack('H*', 'FFE0'), $from, 'UCS-2'), // FULLWIDTH CENT SIGN
+                mb_convert_encoding(pack('H*', 'FFE1'), $from, 'UCS-2'), // FULLWIDTH POUND SIGN
+                mb_convert_encoding(pack('H*', 'FFE2'), $from, 'UCS-2'), // FULLWIDTH NOT SIGN
+                mb_convert_encoding(pack('H*', '2225'), $from, 'UCS-2'), // PARALLEL TO
+                mb_convert_encoding(pack('H*', 'FF0D'), $from, 'UCS-2'), // FULLWIDTH HYPHEN-MINUS
+                mb_convert_encoding(pack('H*', 'FF5E'), $from, 'UCS-2')  // FULLWIDTH TILDE
+            );
+            mb_substitute_character($mbstring_sch);
+            $str = str_replace($MsMapArr, $StdMapArr, $str);
+        }
+
         $to   = empty($to) ? RCUBE_CHARSET : $to;
         $from = self::parse_charset($from);
 
@@ -192,8 +220,8 @@
 
         if ($iconv_options === null) {
             if (function_exists('iconv')) {
-                // ignore characters not available in output charset
-                $iconv_options = '//IGNORE';
+                // not available characters in output charset, represe resembling
+                $iconv_options = '//IGNORE//TRANSLIT';
                 if (iconv('', $iconv_options, '') === false) {
                     // iconv implementation does not support options
                     $iconv_options = '';
@@ -246,11 +274,35 @@
             // return if encoding found, string matches encoding and convert succeeded
             if (in_array($mb_from, $mbstring_list) && in_array($mb_to, $mbstring_list)) {
                 if (mb_check_encoding($str, $mb_from)) {
-                    // Do the same as //IGNORE with iconv
-                    mb_substitute_character('none');
+                    // not available characters in output charset, represe "?"
+                    mb_substitute_character(0x003F);
                     $out = mb_convert_encoding($str, $mb_to, $mb_from);
                     mb_substitute_character($mbstring_sch);
 
+                    // For Unicode WAVE DASH problem (Change Microsoft style mapping to standard mapping)
+                    if (strtolower($mb_from) == 'iso-2022-jp-ms') {
+                        mb_substitute_character(0x003F);
+                        $StdMapArr = array(
+                            mb_convert_encoding(pack('H*', '00A2'), $mb_to, 'UCS-2'), // CENT SIGN
+                            mb_convert_encoding(pack('H*', '00A3'), $mb_to, 'UCS-2'), // POUND SIGN
+                            mb_convert_encoding(pack('H*', '00AC'), $mb_to, 'UCS-2'), // NOT SIGN
+                            mb_convert_encoding(pack('H*', '2016'), $mb_to, 'UCS-2'), // DOUBLE VERTICAL LINE
+                            mb_convert_encoding(pack('H*', '2212'), $mb_to, 'UCS-2'), // MINUS SIGN
+                            mb_convert_encoding(pack('H*', '301C'), $mb_to, 'UCS-2')  // WAVE DASH
+                        );
+                        mb_substitute_character('none');
+                        $MsMapArr = array(
+                            mb_convert_encoding(pack('H*', 'FFE0'), $mb_to, 'UCS-2'), // FULLWIDTH CENT SIGN
+                            mb_convert_encoding(pack('H*', 'FFE1'), $mb_to, 'UCS-2'), // FULLWIDTH POUND SIGN
+                            mb_convert_encoding(pack('H*', 'FFE2'), $mb_to, 'UCS-2'), // FULLWIDTH NOT SIGN
+                            mb_convert_encoding(pack('H*', '2225'), $mb_to, 'UCS-2'), // PARALLEL TO
+                            mb_convert_encoding(pack('H*', 'FF0D'), $mb_to, 'UCS-2'), // FULLWIDTH HYPHEN-MINUS
+                            mb_convert_encoding(pack('H*', 'FF5E'), $mb_to, 'UCS-2')  // FULLWIDTH TILDE
+                        );
+                        mb_substitute_character($mbstring_sch);
+                        $out = str_replace($MsMapArr, $StdMapArr, $out);
+                    }
+
                     if ($out !== false) {
                         return $out;
                     }
diff -ur roundcubemail-1.0.1-ORIGINAL/program/steps/mail/sendmail.inc roundcubemail-1.0.1-ISO2022JP/program/steps/mail/sendmail.inc
--- roundcubemail-1.0.1-ORIGINAL/program/steps/mail/sendmail.inc	2014-05-09 23:08:53.000000000 +0900
+++ roundcubemail-1.0.1-ISO2022JP/program/steps/mail/sendmail.inc	2014-06-21 01:19:22.000000000 +0900
@@ -98,7 +98,7 @@
         if ($identity_arr['mailto'])
             $from = $identity_arr['mailto'];
         if ($identity_arr['string'])
-            $from_string = $identity_arr['string'];
+            $from_string = rcube_charset::convert($identity_arr['string'], RCUBE_CHARSET, $message_charset);
     }
     else {
         $from = null;
@@ -116,6 +116,8 @@
     $from_string = $from;
 }
 
+$from_string = rcmail_email_input_format($from_string);
+
 // compose headers array
 $headers = array();
 
@@ -467,7 +469,7 @@
     $transfer_encoding = $RCMAIL->config->get('force_7bit') ? 'quoted-printable' : '8bit';
 }
 else {
-    $text_charset      = '';
+    $text_charset      = $message_charset;
     $transfer_encoding = '7bit';
 }
 
@@ -490,8 +492,11 @@
 // encoding subject header with mb_encode provides better results with asian characters
 if (function_exists('mb_encode_mimeheader')) {
     mb_internal_encoding($message_charset);
-    $headers['Subject'] = mb_encode_mimeheader($headers['Subject'],
-        $message_charset, 'Q', "\r\n", 8);
+    if(strtolower($message_charset) == 'iso-2022-jp'){
+        $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset, 'B', "\r\n", 8);
+    } else {
+        $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q', "\r\n", 8);
+    }
     mb_internal_encoding(RCUBE_CHARSET);
 }
 
@@ -864,6 +869,18 @@
             if ($name[0] == '"' && $name[count($name)-1] == '"') {
                 $name = substr($name, 1, -1);
             }
+
+            global $message_charset;
+            if (preg_match("/^[\x20-\x7E]+$/", $name) != true) {
+                mb_internal_encoding($message_charset);
+                if(strtolower($message_charset) == 'iso-2022-jp'){
+                    $name = mb_encode_mimeheader($name, $message_charset, 'B', "\r\n", 8);
+                }else{
+                    $name = mb_encode_mimeheader($name, $message_charset, 'Q', "\r\n", 8);
+                }
+                mb_internal_encoding(RCUBE_CHARSET);
+            }
+
             $name     = stripcslashes($name);
             $address  = rcube_utils::idn_to_ascii(trim($address, '<>'));
             $result[] = format_email_recipient($address, $name);
