【问题标题】:Gmail API encoding - how to get rid of 3D and &ampGmail API 编码 - 如何摆脱 3D 和 &amp
【发布时间】:2019-01-27 02:50:08
【问题描述】:

我正在尝试通过 GMAIL API 提取 GMAIL 电子邮件的正文,很好地使用 Python。

我可以使用以下命令提取消息。但是,电子邮件文本的编码似乎存在问题(原始电子邮件中包含 html) - 出于某种原因,每次在每个引用 3D 出现之前。

另外,在 a href="my_url" 中,我随机出现了等号 =,并且在链接的末尾,有一个 &amp 字符,即不在电子邮件的原始 HTML 中。

知道如何解决这个问题吗?

我用来提取电子邮件的代码:

from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

from apiclient import errors
import base64
msgs = service.users().messages().list(userId='me', q="no-reply@hello.com",maxResults=1).execute()
for msg in msgs['messages']:message = service.users().messages().get(userId='me', id=m_id, format='raw').execute()

"raw":将原始字段中包含正文内容的完整电子邮件数据作为 base64url 编码字符串返回;未使用有效负载字段。”

print(base64.urlsafe_b64decode(message['raw'].encode('ASCII')))

td style=3D"padding:20px; color:#45555f; font-family:Tahoma,He= 绿叶蕈;字体大小:12px;行高:18px; "

JPk79hd = JFQZEhc6%2BpAiQKF8M85SFbILbNd6IG8%2FEAWwe3VTr2jPzba4BHf%2FEnjMxq66fr228I7OS =

【问题讨论】:

  • 将整个文档放在我面前之后 - 看起来 python 用等号标记了每行的末尾,因为它似乎试图将每一行保留为 ### 字符。关于可能导致这种情况的任何想法?如果我至少可以在每个字符串的末尾得到等号,我可以用 find-replace_with_black 完成其余的工作。提前谢谢你
  • 看起来等号与base64的编码有关 - stackoverflow.com/questions/6916805/…

标签: python base64 gmail-api


【解决方案1】:

我已从我在 asp.net 中的网络服务向 gmail 发送了一封邮件 内容是真正的 html
尽管=3D

,它仍显示为想要的
Dim Bericht As MailMessage
Bericht = New MailMessage

我的 styleText 的内容是

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-=1">
<meta content="text/html; charset=us-ascii">
<style>h1{color:blue;}
.EditText{
background:#ff0000;/*rood*/
height:100;
font-size:10px;
color:#0000ff;/*blauw*/
}
</head>

而我身体的内容是

<div class='EditText'>this is just some text</div>

最后我把它组合起来

Bericht.Body = "<html>" & styleText & "<body>" & content& "</body></html>"

如果我查看收到的消息的来源,仍然有这个 3D 它显示

<html><head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
=3D1">
<meta content=3D"text/html; charset=3Dus-ascii">
<style>h1{color:blue;}
.EditText{
background:#ff0000;/*rood*/
height:100;
font-size:10px;
color:#0000ff;/*blauw*/
}
</style>
</head><body><div class=3D'EditText'>MailadresAfzender</div></body></html>

结果显示带有红色背景的蓝色文本。很棒

【讨论】:

    【解决方案2】:

    您应该检查Content-Transfer-Encoding 标头以查看它是否指定quoted-printable,因为它看起来像quoted-printable 编码文本。

    RFC 1521, Section 5.1

    Quoted-Printable 编码旨在表示主要由八位字节组成的数据,这些八位字节对应于 US-ASCII 字符集中的可打印字符。它以这样一种方式对数据进行编码,使得生成的八位字节不太可能被邮件传输修改。如果被编码的数据主要是 US-ASCII 文本,则数据的编码形式在很大程度上仍然可以被人类识别。完全是 US-ASCII 的正文也可以用 Quoted-Printable 编码,以确保消息通过字符转换和/或换行网关时数据的完整性。

    Python 的quopri 模块可用于解码具有此编码的电子邮件。

    【讨论】:

      【解决方案3】:

      遗憾的是,我无法找出解码消息的正确方法。

      我最终使用了以下解决方法:

      1) 将消息拆分成一个列表,每一行作为一个列表项

      2) 找出其中一个字符串的列表位置,以及结束字符串的位置。

      3) 从#2 中生成一个新列表,然后重新生成相同的列表,去掉最后一个字符(等号)

      4) 从新列表中生成一个字符串

      5) 搜索我想要的网址

          x= mime_msg.splitlines() #convert to list
          a = ([i for i, s in enumerate(x) if 'My unique start string' in s])[0] #get list# of beginning
          b = ([i for i, s in enumerate(x) if 'my end id' in s])[0] #end
          y = x[a:b]   #generate list w info we want
          new_list=[]
          for item in y:new_list.append(item[:-1]) #get rid of last character, which bs base64 encoding is "="
          url = ("".join(new_list)) #convert to string
          url = url.replace("3D","").replace("&amp","") #cleaner for some reason - encoding gives us random 3Ds + &amps
          csv_url = re.search('Whatever message comes before the URL (.*)',url).group(1)
      

      以上使用

      import re 
      from __future__ import print_function
      from googleapiclient.discovery import build
      from httplib2 import Http
      from oauth2client import file, client, tools
      
      from apiclient import errors
      import base64
      import email
      

      【讨论】:

        猜你喜欢
        • 2019-07-05
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 2021-11-09
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多