ツイートする このエントリーを含むはてなブックマーク [雑記]

Ak@Ne!の修正方法 / 2009-07-31 (金)

久しぶりにラグナなどの話題のない雑記を書きたいと思います。

これは昨日の雑記に書いたAk@Ne!のバグ修正を最新版を手に入れる前に実装したい
という人のために書いていたりするので…このページで公開しているAk@Ne!という
メールソフトが分からない人にとっては何を言っているのか分からないかもしれません。

修正するにはAk@Ne! Version 1.10のソース版とVisualStudio(2005以降)のC#が編集できる
プログラム開発ソフトが必要となります。(無料で配布しているExpress Editonでも修正が
可能ですので、簡単なソフトをちょっと作ってみたいという人はこの機会にダウンロードして
遊んでみるのも良いかもしれません。)

準備ができたらソース版のファイルを解凍ツール(Lhaplusなど)で解凍し、AkaneMail
フォルダの中にあるAkaneMail.slnを開きます。

VisualStudio2005(またはVisualC# Express 2005)でAkaneMail.slnを開くとForm1.csが
開ける状態になっているはずなので、Form1.cs([デザイン]と書いていない方)を
クリックしてソースコードを開ける状態にします。(2008で開くと変換ウィザードが
起動するので、その場合は次へ(N)で飛ばして変換してしまってから同じ操作を行ってください。)

ソースコードが開けたら、検索機能(Alt+F)でlistView1_Clickを検索して以下に記載した
修正前コードの部分を修正後コードに書き変えてメニューの[ビルド(B)]-[ソリューションのリビルド(R)]を
実行し、AkaneMailの配下にあるbin\Release\AkaneMail.exeを現行のAkaneMail.exeと差し替えれば
今回のバグ(Base64でエンコードされた文章がそのまま表示されてしまう)は解消されます。

Form1.cs (修正前)

private void listView1_Click(object sender, EventArgs e)
{
    Mail mail = null;
    Icon appIcon;
    bool htmlMail = false;
    ListViewItem item = listView1.SelectedItems[0];
    
    (以下コード省略)
    
    else{
        // 添付ファイルが存在しない通常のメールまたは
        // 送信済みメールのときは本文をテキストボックスに表示する
        
        (以下コード省略)
        
        // 本文をテキストとして表示する
        this.textBody.Text = mail.body;
    }
}

Form1.cs (修正後)

private void listView1_Click(object sender, EventArgs e)
{
    Mail mail = null;
    Icon appIcon;
    bool htmlMail = false;
    bool base64Mail = false;
    ListViewItem item = listView1.SelectedItems[0];
    
    (以下コード省略)
    
    else{
        // 添付ファイルが存在しない通常のメールまたは
        // 送信済みメールのときは本文をテキストボックスに表示する
        
        (以下コード省略)
        
        // Contents-TypeがUTF8のメールの場合
        base64Mail = attach.GetHeaderField("Content-Type:", mail.header).Contains("utf-8");
        base64Mail = attach.GetHeaderField("Content-Type:", mail.header).Contains("UTF-8");
        base64Mail = attach.GetDecodeHeaderField("Content-Transfer-Encoding:", mail.header).Contains("base64");

        // base64の文章が添付されている場合
        if(base64Mail == true){
            // 文章をデコードする設定を有効にする
            nMail.Options.EnableDecodeBody();

            // ヘッダと本文付きの文字列を添付クラスに追加する
            attach.Add(mail.header, mail.body);

            // 添付ファイルを取り外す(実際はデコード処理)
            attach.Save();

            if(!attach.Body.Contains("\n\n")){
                attachMailBody = attach.Body;
                this.textBody.Text = attach.Body;
            }
            else{
                attach.Body.Replace("\n\n", "\r\n");
                attachMailBody = attach.Body.Replace("\n", "\r\n");
                this.textBody.Text = attachMailBody;
            }
            
            // 文章をデコードする設定を無効にする
            nMail.Options.DisableDecodeBody();
        }
        else{
            // 本文をテキストとして表示する
            this.textBody.Text = mail.body;
        }
    }
}

多分1.20を公開するまではこのバグを仕様としてそのままにしているかも
しれないので…出来る人はやってしまった方が楽かも…と思います。

まだこれからの予定なのでどうなるかは決めていないけれど、Ak@Ne!に
Azuki Editor Engineを組み込もうかなぁ…と考えています。

とりあえずその前に簡単なメモ帳を作って組み込んでどうなるか…を検証してからなので
実装するのはまだまだ先の話かもです…。

今日の夜はラグナのギルド集会が控えているので、ゆっくりお休みして
また雑記として書けるようにしたいなぁ…と思っています。