電気ウナギ的○○

About Home

VB.NET でメールサブジェクトの B デコード

shinoda (2015年9月19日 11:23)
VB.NET でメールサブジェクトをデコード(Bエンコードされたものだけ)したいんで、こんな感じで組んでみたけど、何か今ひとつだな。

ちなみに前処理で、

Subject: =?UTF-8?B?5pyA5paw44Gu44OK44Kk44Kt44Ki44Kk44OG44Og44KS44K344Or?=
 =?UTF-8?B?44OQ44O844Km44Kj44O844Kv44Gu44GK5L6b44Gr?=

みたいに長いサブジェクトが複数行に渡るものは、

=?UTF-8?B?5pyA5paw44Gu44OK44Kk44Kt44Ki44Kk44OG44Og44KS44K344Or?==?UTF-8?B?44OQ44O844Km44Kj44O844Kv44Gu44GK5L6b44Gr?=

のように、一行のテキストにまとめてある。

で、該当処理をまとめた Function がこれ。

    Private Function decodeMailSubject(ByVal subject As String) As String

        Dim tmp As String = subject
        Dim pattern As New System.Text.RegularExpressions.Regex("^(.*?)(\=+\?.+?\?\=)(.*)$") ' エンコード部分全体にマッチ
        Dim pattern2 As New System.Text.RegularExpressions.Regex("^\=+\?(.+?)\?B\?(.+?)\?\=$", System.Text.RegularExpressions.RegexOptions.IgnoreCase) ' エンコードされた本文部分にマッチ

        subject = String.Empty

        Do Until tmp = String.Empty

            Dim m As System.Text.RegularExpressions.Match = pattern.Match(tmp)

            If m.Success Then ' マッチした

                subject &= m.Groups.Item(1).Value

                ' =?~?=部分の要素分解
                Dim m2 As System.Text.RegularExpressions.Match = pattern2.Match(m.Groups.Item(2).Value)
                If m2.Groups(1).Value <> String.Empty Then
                    ' デコード
                    Dim b() As Byte = System.Convert.FromBase64String(m2.Groups(2).Value)
                    subject &= System.Text.Encoding.GetEncoding(m2.Groups(1).Value).GetString(b)
                Else
                    subject &= m.Groups.Item(2).Value
                End If

                tmp = m.Groups.Item(3).Value

            Else
                ' マッチしなかったらもう終わり
                subject &= tmp
                tmp = String.Empty
            End If

        Loop

        Return subject

    End Function

テスト結果は良好だけど、コードとしての美しさに欠けるな(^^; ま、VB.NET をそんなに使い込んでないから仕方ないか(^^;

是非とも VB.NET マスターの方の「これ、こう書いた方がいいよ」というご指摘・ご指導をお待ちしております(笑)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3610

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE