【问题标题】:Base64 decoding of MIME email not working (GMail API)MIME 电子邮件的 Base64 解码不起作用(GMail API)
【发布时间】:2014-09-08 19:58:37
【问题描述】:

我正在使用 GMail API 来检索电子邮件内容。我正在为正文获取以下 base64 编码数据:http://hastebin.com/ovucoranam.md

但是当我通过 base64 解码器运行它时,它要么返回一个空字符串(错误),要么返回类似于 HTML 数据但带有一堆奇怪字符的东西。

帮助?

【问题讨论】:

    标签: email character-encoding base64 mime gmail-api


    【解决方案1】:

    我在使用 API 结果时发现,一旦我深入到正文,我就可以选择在可用方法中进行解码。

      val message = mService!!.users().messages().get(user, id).setFormat("full").execute()
    
      println("Message snippet: " + message.snippet)
      if(message.payload.mimeType == "text/plain"){
            val body = message.payload.body.decodeData()  // getValue("body")
    
            Log.i("BODY", body.toString(Charset.defaultCharset()))
      }
    

    结果:-
    com.example.quickstart I/BODY: ISOLATE NORMAL: 514471,Fap, South Point Rolleston, 55 Faringdon Boulevard, Rolleston, 2018 年 5 月 30 日 20:59:21

    【讨论】:

      【解决方案2】:

      您需要使用 URL(又名“web”)安全 base64 解码字母表(请参阅 rfc 4648),您似乎没有这样做。使用标准 base64 字母有时可能会起作用,但并非总是如此(其中 2 个字符不同)。

      文档似乎并没有一致地提到这个重要的细节。这是它的一个地方: https://developers.google.com/gmail/api/guides/drafts

      此外,如果您的特定库不支持“URL 安全”字母表,那么您可以先对字符串进行字符串替换(“-”与“+”,“_”与“/”),然后正常执行base64解码就可以了。

      【讨论】:

      • 我不确定。我直接从 gmail 的 API(JSON 响应)获取编码字符串并使用 NSData initWithBase64EncodedString:options: 方法。它没有提到任何关于 URL 安全字母表的内容?
      • 如果您的特定库不支持“URL 安全”字母表,那么您可以先对字符串进行字符串替换(“-”与“+”和“_”与“/”)和然后对其进行正常的base64解码。希望有帮助。
      【解决方案3】:

      有一个python 2.x和3.x的例子:

      decodedContents = base64.urlsafe_b64decode(payload["body"]["data"].encode('ASCII'))
      

      【讨论】:

        【解决方案4】:

        如果您只需要为了显示目的进行解码,请考虑使用 atob 对 JavaScript 前端中的消息进行解码(请参阅ref)。

        【讨论】:

          【解决方案5】:

          我在解码来自Gmail API 的消息对象响应中的“数据”字段时遇到了同样的问题。 Google Ruby API 库也没有正确解码文本。我发现我需要做一个url-safe base64 decode

          @data = Base64.urlsafe_decode64(JSON.parse(@result.data.to_json)["payload"]["body"]["data"])
          

          希望有帮助!

          【讨论】:

            【解决方案6】:

            我不确定你是否已经解决了,但 GmailGuy 是正确的。您需要将正文转换为 Base64 RFC 4648 标准。要点是您需要将- 替换为+,将_ 替换为/

            我已采用您的原始输入并进行了替换:http://hastebin.com/ukanavudaz

            并用base64decode.org解码,还好。

            【讨论】:

            • 这也适用于您使用 python - 感谢您的保存!
            【解决方案7】:

            我将 base64 测试处理为一个文件 (b64.txt),然后使用带有 -d 选项的 base64(来自 coreutils)对其进行 base64 解码(请参阅http://linux.die.net/man/1/base64),我得到了完全可读的文本。我使用的命令是:

            cat b64.txt | base64 -d
            

            【讨论】:

            • 嗯,很奇怪!尝试使用以下服务对其进行解码:base64decode.org 返回奇怪的结果。同样使用 NSData::initWithBase64EncodedString 在objective-c 中对其进行解码返回nil(错误)。有什么不同的想法吗?
            • 可能base64编码有一些错误,有些解码器比较宽容/宽容,有些则不然。您确定您正确复制了整个 base64 编码的字符串,并且没有遗漏字符串开头或结尾的任何字符吗?
            • 安迪,我不确定你做错了什么。使用 base64decode.org(使用默认的 UTF-8 解码),我得到了完全正常的结果。
            • 得到结果后往下拉一点,最后会看到一堆乱七八糟的字符。
            猜你喜欢
            • 2023-03-17
            • 2018-03-03
            • 2017-01-22
            • 2018-07-28
            • 2014-05-04
            • 2015-03-28
            • 2014-06-03
            • 2014-09-04
            • 2017-10-28
            相关资源
            最近更新 更多