Indy10のメール送信処理においてBase64エンコードで文字化けが発生する問題について

Delphi MLでIndy10のメール送信で文字化けの話があった。

どのバージョンのIndy10だったかは忘れたが、Base64エンコードに問題があったような記憶がある。

覚えている範囲で、Indy10のBas64エンコード処理の問題について解説する。

■問題のあったIndy10のBase64エンコードの方法

Indy10では、次のような手順でBase64エンコード処理を行っていた。

(1)文字列をBase64エンコードする。
(2)規定の長さで改行する。

問題は(2)の改行を入れる処理だ。

このときマルチバイト文字の途中で改行が入る可能性がある。

■文字化けの症状

たとえば「あいうえお」をエンコードして「aaiiuueeoo」になった。
そして改行を入れて「aaiiuue[改行]eoo」となったとする。

このとき改行以降の文字列が文字化けする可能性がある。

■メールソフト別のデコード処理方法

「aaiiuue[改行]eoo」をどのようにデコードするかによって、
文字化けが発生するメールソフトと発生しないメールソフトが存在している。

文字化けが発生しないメールソフトは次の手順でデコードする。

(1)エンコードされた文字列を結合する

aaiiuue[改行]eoo => aaiiuueeoo

(2)結合した文字列をデコードする

aaiiuueeoo => あいうえお

文字化けが発生するメールソフトでは次のような手順でデコードする。

(1)各行をデコードする

aaiiuue[改行]eoo => あいうX[改行]XXX

※Xは文字化け

(2)デコードした文字列を結合する

あいうX[改行]XXX => あいうXXXX

※Xは文字化けした文字を示しています。

■最後に

記憶違いの可能性があるため、ご自身でソースコードをご確認ください。

コメント

  1. 問題の解決策が分からず悩んでいましたが、
    IdMessage_InitializeISO()で、
    VHeaderEncoding = L’8′;
    とすることで解決出来ました。

    ちなみに、IdCoderHeader.pasによると、VHeaderEncodingは’B’、’Q’、’8’の3種類

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください