MIME电子邮件的Base64解码不起作用(GMail API)

时间:2014-07-17 19:39:45

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

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

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

帮助?

7 个答案:

答案 0 :(得分:20)

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

我已经接受了原始输入并进行了替换:http://hastebin.com/ukanavudaz

并使用base64decode.org对其进行解码,这很好。

答案 1 :(得分:12)

你需要使用 URL (又名" web")安全base64解码字母表(参见rfc 4648),它不会出现在你做的事情上。使用标准base64字母表有时可以工作但不总是(2个字符不同)。

Docs似乎并不一贯提到这个重要的细节。尽管如此,这是其中的一个: https://developers.google.com/gmail/api/guides/drafts

此外,如果您的特定图书馆不支持"网址安全"然后你可以先在字符串上进行字符串替换(" - "用" +"和" _"用" /" )然后对它进行正常的base64解码。

答案 2 :(得分:7)

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

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

希望有所帮助!

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我在玩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

答案 6 :(得分:-1)

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

cat b64.txt | base64 -d