12

メールの件名と本文を .Net で抜き出そうとしています。text/html MessagePart 以外は問題ないようです。エンコーディングなどについてはわかりません-これで問題なく動作する人はいますか? 変換しようとするとエラーになります。

text/html 本文データの生の文字列は次のとおりです。

"PGRpdiBkaXI9Imx0ciI-dGV4dCBpbiBoZXJlPGJyPjwvZGl2Pg0K"

これはエラーをスローします。

「入力は有効な Base-64 文字列ではありません。base 64 以外の文字、3 つ以上の埋め込み文字、または埋め込み文字に無効な文字が含まれているためです。」

コードは次のとおりです。

    UsersResource.MessagesResource.GetRequest gr = gs.Users.Messages.Get(userEmail, TextBox1.Text);
    gr.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Full;                
    Message m = gr.Execute();

            foreach (MessagePart p in m.Payload.Parts)
            {
                if (p.MimeType == "text/html")
                {
                    try
                    {
                        byte[] data = Convert.FromBase64String(p.Body.Data);
                        string decodedString = Encoding.UTF8.GetString(data);
                        Response.Write(decodedString);
                    }
                    catch (Exception ex) { }
                }
            }

デコードが間違っていますか???

ご協力いただきありがとうございます。

4

4 に答える 4

10

最終的に使用したコードは次のとおりです。

                foreach (MessagePart p in m.Payload.Parts)
                {
                    if (p.MimeType == "text/html")
                    {
                         byte[] data = FromBase64ForUrlString(p.Body.Data);
                         string decodedString = Encoding.UTF8.GetString(data);
                         Response.Write(decodedString);                            
                    }
                }

....

    public static byte[] FromBase64ForUrlString(string base64ForUrlInput)
    {
        int padChars = (base64ForUrlInput.Length % 4) == 0 ? 0 : (4 - (base64ForUrlInput.Length % 4));
        StringBuilder result = new StringBuilder(base64ForUrlInput, base64ForUrlInput.Length + padChars);
        result.Append(String.Empty.PadRight(padChars, '='));
        result.Replace('-', '+');
        result.Replace('_', '/');
        return Convert.FromBase64String(result.ToString());
    }

良い記事http://www.codeproject.com/Tips/76650/Base-base-url-base-url-and-z-base-encoding

于 2014-06-30T05:50:57.093 に答える
4

このページでhttps://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get

デコード用の次のコードを含む .NET の例があることがわかります。

// Converting from RFC 4648 base64-encoding
// see http://en.wikipedia.org/wiki/Base64#Implementations_and_history
String attachData = attachPart.Data.Replace('-', '+');
attachData = attachData.Replace('_', '/');
byte[] data = Convert.FromBase64String(attachData);
于 2015-03-06T14:04:13.047 に答える