Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email Base64解码MIME电子邮件不工作(GMail API)_Email_Character Encoding_Base64_Mime_Gmail Api - Fatal编程技术网

Email Base64解码MIME电子邮件不工作(GMail API)

Email Base64解码MIME电子邮件不工作(GMail API),email,character-encoding,base64,mime,gmail-api,Email,Character Encoding,Base64,Mime,Gmail Api,我正在使用GMail API检索电子邮件内容。我正在获取身体的以下base64编码数据: 但是当我通过base64解码器运行它时,它要么返回一个空字符串(错误),要么返回一些类似于HTML数据但带有一堆奇怪字符的内容 帮助?我将base64测试处理成一个文件(b64.txt),然后base64使用base64(来自coreutils)和-d选项(请参阅)对其进行解码,得到了完全可读的文本。我使用的命令是: cat b64.txt | base64 -d 您需要使用URL(又名“web”)安全的

我正在使用GMail API检索电子邮件内容。我正在获取身体的以下base64编码数据:

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


帮助?

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

cat b64.txt | base64 -d
您需要使用URL(又名“web”)安全的base64解码字母表(请参阅RFC4648),而您似乎没有这样做。使用标准的base64字母有时可能有效,但并不总是有效(其中两个字符不同)

文档似乎没有持续提到这个重要的细节。但这里有一个例子:


另外,如果您的特定库不支持“URL安全”字母表,那么您可以先对字符串进行字符串替换(“-”加“+”和“”加“/”),然后对其进行常规的base64解码。

我不确定您是否已经解决了这个问题,但Gmail Guy是正确的。您需要将主体转换为Base64 RFC 4648标准。jist是您需要用
+
替换
-
,用
/
替换
-

我接受了您最初的输入并进行了替换:


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

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

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

希望有帮助 python 2.x和3.x有一个例子:

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

我发现,在玩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,法林顿大道55号南点罗尔斯顿Fap,罗尔斯顿,2018年5月30日20:59:21

Hmmm!尝试使用如下服务对其进行解码:返回奇怪的结果。在objective-c中使用NSData::initWithBase64EncodedString对其进行解码时,返回nil(错误)。你知道有什么不同吗?可能base64编码中有一些错误,一些解码器更宽容,而另一些则不然。你确定你正确地复制了整个base64编码字符串,并且没有遗漏字符串开头或结尾的任何字符吗?Andy,我不确定你做错了什么。我使用base64decode.org(默认的UTF-8解码)得到了非常正常的结果。当你得到结果时,向下滚动一点,你会看到一堆字符在最后乱成一团。我不确定。我直接从gmail的API(JSON响应)获取编码字符串,并使用
NSData initWithBase64EncodedString:options:
方法。它没有提到关于URL安全字母表的任何内容?如果您的特定库不支持“URL安全”字母表,那么您可以首先对字符串进行字符串替换(“-”加“+”和“”加“/”),然后对其执行正常的base64解码。希望对您有所帮助。如果您正在使用python,这也适用-谢谢您的保存!