Having trouble reading the text/html message part

后端 未结 3 1761
生来不讨喜
生来不讨喜 2021-01-02 03:11

I\'m trying to pull out the subject and body of an email with .Net. It seems to go OK except for the text/html MessagePart. I\'m not sure of the encoding etc - has anybody

相关标签:
3条回答
  • 2021-01-02 03:17

    On this page https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get

    you can find that there is a .NET example with this code for decoding:

    // 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);
    
    0 讨论(0)
  • 2021-01-02 03:23

    The body data appears to be base64url-encoded, not base64-encoded. The difference is the use of - and _, instead of + and /, in the encoding’s alphabet of 64 characters. One solution is to replace all - and _ characters with + and / respectively, before calling FromBase64String.

    See http://tools.ietf.org/html/rfc4648#section-5

    0 讨论(0)
  • 2021-01-02 03:26

    Here is the code I ended up using:

                    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());
        }
    

    Good article http://www.codeproject.com/Tips/76650/Base-base-url-base-url-and-z-base-encoding

    0 讨论(0)
提交回复
热议问题