添付ファイルの名前が正しく読めないNo.01205
fujimoto さん 00/11/07 21:22
 
藤本と申します。

下記のメールの添付ファイルの名前がplain.txtとなってしまいます。
(正しくは、「テストメール.txt」です。)

送信は、「Mew version 1.94.2 on Emacs 20.6 / Mule 4.1 (AOI)」
で行っています。

よろしくお願いします。

----Next_Part(Tue_Nov_07_21:11:45_2000_444)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


テスト


----Next_Part(Tue_Nov_07_21:11:45_2000_444)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: =?iso-2022-jp?B?GyRCJUYlOSVIJWEhPCVrGyhCLnR4dA==?=
Content-Disposition: attachment;
 filename*=iso-2022-jp''%1B%24B%25F%259%25H%25a%21%3C%25k%1B%28B%2Etxt

ああああああああああ
いいいいいいいいい

----Next_Part(Tue_Nov_07_21:11:45_2000_444)----


[ ]
RE:01205 添付ファイルの名前が正しく読めないNo.01206
hont さん 00/11/07 21:52
 
どもん、本戸です。

fujimotoさんが Tue, 07 Nov 2000 21:22:55 +0900に書かれた
「turukame.1:01205| 添付ファイルの名前が正しく読めない」
Message-Id:<xxxxxxxxxxxxxx@maruo.co.jp>から
> 下記のメールの添付ファイルの名前がplain.txtとなってしまいます。
> (正しくは、「テストメール.txt」です。)
>
> 送信は、「Mew version 1.94.2 on Emacs 20.6 / Mule 4.1 (AOI)」
> で行っています。
>
> よろしくお願いします。
>
> ----Next_Part(Tue_Nov_07_21:11:45_2000_444)--
> Content-Type: Text/Plain; charset=iso-2022-jp
> Content-Transfer-Encoding: 7bit
>
>
> テスト
>
>
> ----Next_Part(Tue_Nov_07_21:11:45_2000_444)--
> Content-Type: Text/Plain; charset=iso-2022-jp
> Content-Transfer-Encoding: 7bit
> Content-Description: =?iso-2022-jp?B?GyRCJUYlOSVIJWEhPCVrGyhCLnR4dA==?=
> Content-Disposition: attachment;
>  filename*=iso-2022-jp''%1B%24B%25F%259%25H%25a%21%3C%25k%1B%28B%2Etxt
>
> ああああああああああ
> いいいいいいいいい
>
> ----Next_Part(Tue_Nov_07_21:11:45_2000_444)----

RFC2231形式とMIME形式のハイプリッドタイプですね。

添付ファイル名のRFC2231形式については
http://www.emaillab.org/essay/japanese-filename.html
を参照するといいでしょう。

Datulaのとちょっと似ている↓
> --------=_973601216.7E8.7D4
> Content-Type: application/octet-stream; name="=?ISO-2022-JP?B?GyRCQzxLdhso
>QlQbJEIlXiVLJWUlIiVrGyhCLnBwdA==?="
> Content-Transfer-Encoding: base64
> Content-Disposition: attachment;
>  filename*0*=ISO-2022-JP''%1B$BC%3CKv%1B%28B;
>  filename*1=T;
>  filename*2*=%1B$B%25^%25K%25e%25%22%25k%1B%28B;
>  filename*3=.ppt
>
> YQ==
> --------=_973601216.7E8.7D4--

--
ほんと                     mailto:xxxx@rr.iij4u.or.jp

[ ]
RE:01206 添付ファイルの名前が正しく読めないNo.01299
秀まるお さん 00/11/09 11:51
 
> 添付ファイル名のRFC2231形式については
> http://www.emaillab.org/essay/japanese-filename.html
> を参照するといいでしょう。

 そのような仕様があったとは全然知りませんでした。さっそく対応させていた
だきます。

 毎度ご指導ありがとうございます。>ほんとさん

[ ]
RE:01299 添付ファイルの名前が正しく読めないNo.01314
fujimoto さん 00/11/09 17:55
 
藤本です。

>> 添付ファイル名のRFC2231形式については
>> http://www.emaillab.org/essay/japanese-filename.html
>> を参照するといいでしょう。
>
> そのような仕様があったとは全然知りませんでした。さっそく対応させていた
>だきます。

よろしくお願いします。

出来れば、鶴亀で送信する時に、添付ファイルの名前が日本語の場合、
RFC2331と従来の方法のどちらかが選べるようにしていただけるとうれ
しいです。


[ ]
RE:01314 添付ファイルの名前が正しく読めないNo.01325
秀まるお さん 00/11/09 19:31
 
> 出来れば、鶴亀で送信する時に、添付ファイルの名前が日本語の場合、
> RFC2331と従来の方法のどちらかが選べるようにしていただけるとうれ
> しいです。

 受信側を作るのにもかなり時間がかかったので、送信側はもっともっと後に
したいなぁと…。

 参考までに、以下、ソースコード(filename*=関係をfilename=に変換する処理)

BOOL CAddBuffer::ConvertRFC2231( int x ) {
    char*   pch = pb + x;
    char*   pchEnd = pch;
    do {
        pchEnd = SkipOneLine( pchEnd );
    } while( *pchEnd == ' ' || *pchEnd == '\t' );
    char*   pchNextPart = (char*)memchr( pch, ';', (int)pchEnd - (int)pch );
    if( pchNextPart == NULL ) {
        return FALSE;
    }
    CAddBuffer  strNew;
    char*   pchParamName = NULL;
    int     cchParamName;
    BOOL    fReplaced = FALSE;
Restart:
    while( *pchNextPart == ';' ) {
        pch = pchNextPart;
        pch ++;
        pchNextPart = (char*)memchr( pch, ';', (int)pchEnd - (int)pch );
        if( pchNextPart == NULL ) {
            pchNextPart = pchEnd;
        }
        while( pch < pchEnd && *pch <= ' ' ) {
            pch ++;
        }
        char*   pchParamName2 = pch;
        while( isalpha( *pch ) ) {
            pch ++;
        }
        int     cchParamName2 = (int)pch - (int)pchParamName2;
        if( pchParamName != NULL ) {
            if( cchParamName != cchParamName2
             || memcmp( pchParamName, pchParamName2, cchParamName ) != 0 ) {
                // 置き換え
                int cchDecrease = (int)pchNextPart - (int)pchParamName - str
New.GetLength();
                memcpy( pchParamName, strNew.Direct(), strNew.GetLength() );
                memcpy( pchParamName + strNew.GetLength(), pchNextPart, cb +
 1 - ( (int)pchNextPart - (int)pb ) );
                cb -= cchDecrease;
                pchNextPart -= cchDecrease;
                pchParamName2 -= cchDecrease;
                pch -= cchDecrease;
                pchEnd -= cchDecrease;
                fReplaced = TRUE;
                goto Label_NewParam;
            }
        } else {
Label_NewParam:;
            if( *pch != '*' ) {
                pchParamName = NULL;
                continue;
            }
            pchParamName = pchParamName2;
            cchParamName = cchParamName2;
            strNew.Empty();
            strNew.Add( pchParamName, cchParamName );
            strNew += "=";
        }
        if( *pch != '*' ) {
            // RFC2231形式じゃない
            pchParamName = NULL;
            continue;
        }
        // RFC2231形式の場合
        BOOL    fDecode;
        pch ++;
        if( *pch >= '0' && *pch <= '9' ) {
            // filename*0=XXXXX
            // filename*0*=XXXXX の形式
            pch ++;
            if( *pch == '*' ) {
                fDecode = TRUE;
                pch ++;
            } else {
                fDecode = FALSE;
            }
        } else {
            // filename*=iso-2022-jp'ja' のような形式の場合かどうか
            fDecode = TRUE;
        }
        while( *pch != '=' ) {
            if( pch >= pchNextPart ) {
                goto Restart;
            }
            pch ++;
        }
        pch ++;
        while( *pch == ' ' || *pch == '\t' ) {
            if( pch >= pchNextPart ) {
                goto Restart;
            }
            pch ++;
        }
        BOOL    fQuoted = FALSE;
        if( *pch == '\"' ) {
            pch ++;
            fQuoted = TRUE;
        }
        if( fDecode ) {
            // ' を2つスキップする
            while( *pch != '\'' ) {
                if( pch >= pchNextPart ) {
                    goto Restart;
                }
                pch ++;
            }
            pch ++;
            while( *pch != '\'' ) {
                if( pch >= pchNextPart ) {
                    goto Restart;
                }
                pch ++;
            }
            pch ++;
            while( *pch >= ' ' && pch < pchNextPart && (!fQuoted || *pch !=
'\"') ) {
                if( *pch == '%' ) {
                    char    ch = (GetHexCode( pch[1] ) << 4) + GetHexCode( p
ch[2] );
                    strNew.Add( &ch, 1 );
                    pch += 3;
                } else {
                    strNew.Add( pch, 1 );
                    pch ++;
                }
            }
        } else {
            char*   pchStart = pch;
            while( *pch >= ' ' && pch < pchNextPart && (!fQuoted || *pch !=
'\"') ) {
                pch ++;
            }
            strNew.Add( pchStart, (int)pch - (int)pchStart );
        }
        if( *pchNextPart != ';' ) {
            // 置き換え。ただし改行も入れる。
            int cchDecrease = (int)pchNextPart - (int)pchParamName - strNew.
GetLength() - 2;
            memcpy( pchParamName, strNew.Direct(), strNew.GetLength() );
            memcpy( pchParamName + strNew.GetLength(), szCRLF, 2 );
            memcpy( pchParamName + strNew.GetLength() + 2, pchNextPart, cb +
 1 - ( (int)pchNextPart - (int)pb ) );
            cb -= cchDecrease;
            fReplaced = TRUE;
            break;
        }
    }
    return fReplaced;
}

[ ]
RE:01325 添付ファイルの名前が正しく読めないNo.01328
fujimoto さん 00/11/09 20:00
 
>> 出来れば、鶴亀で送信する時に、添付ファイルの名前が日本語の場合、
>> RFC2331と従来の方法のどちらかが選べるようにしていただけるとうれ
>> しいです。
>
> 受信側を作るのにもかなり時間がかかったので、送信側はもっともっと後に
>したいなぁと…。
>

気が向いた時で結構ですので、よろしくお願いします。

[ ]