DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

メールのサブジェクトをデコードする

=?ISO-2022-JP?B?GyRCJE8kOCRhJF4kNyRGGyhC?=

のようなメールのSubjectをデコードするには、RFC2047の知識が必要になるでしょう。しかし、Base64形式のみ対応で、簡単なものであれば、次のような簡単なコード(メソッド)で実現できます。

VB.NET
コードを隠すコードを選択
''' <summary>
''' メールのサブジェクトをデコードする
''' </summary>
''' <param name="subject">デコードするメールサブジェクト</param>
''' <returns>デコードされた文字列</returns>
Private Shared Function DecodeMailSubject(ByVal subject As String) As String
    '要素を分解する
    Dim s As String() = subject.Split("?"c)
    Dim b() As Byte
    If s(2) = "B" Then
        'Base64形式の時
        b = System.Convert.FromBase64String(s(3))
    Else
        'Base64形式のみ対応
        Throw New Exception("未対応のエンコード形式です。")
    End If
    's(1)をEncoding名として、デコードする
    Return System.Text.Encoding.GetEncoding(s(1)).GetString(b)
End Function
C#
コードを隠すコードを選択
/// <summary>
/// メールのサブジェクトをデコードする
/// </summary>
/// <param name="subject">デコードするメールサブジェクト</param>
/// <returns>デコードされた文字列</returns>
private static string DecodeMailSubject(string subject)
{
    //要素を分解する
    string[] s = subject.Split('?');
    byte[] b;
    if (s[2] == "B")
    {
        //Base64形式の時
        b = System.Convert.FromBase64String(s[3]);
    }
    else
    {
        //Base64形式のみ対応
        throw new Exception("未対応のエンコード形式です。");
    }
    //s[1]をEncoding名として、デコードする
    return System.Text.Encoding.GetEncoding(s[1]).GetString(b);
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。