繁体   English   中英

Gmail API 编码 - 如何摆脱 3D 和 &

[英]Gmail API encoding - how to get rid of 3D and &amp

我正在尝试通过 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= lvetica; font-size:12px; line-height:18px; "

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

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

根据RFC 1521,第 5.1 节

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

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

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

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

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

我已经从我在 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>

结果显示红色背景的蓝色文本。 伟大的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM