我正尝试使用Python很好地通过GMAIL API提取GMAIL电子邮件的正文。
我能够使用以下命令提取消息。但是,电子邮件文本的编码似乎存在问题(原始电子邮件中包含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()
print(base64.urlsafe_b64decode(message['raw'].encode('ASCII')))
td style = 3D ”填充:20px;颜色:#45555f;字体家族:Tahoma,He = 莱维蒂察font-size:12px; line-height:18px;
JPk79hd = JFQZEhc6%2BpAiQKF8M85SFbILbNd6IG8%2FEAWwe3VTr2jPzba4BHf%2FEnjMxq66fr228I7OS =
答案 0 :(得分:0)
可悲的是,我无法找出解码消息的正确方法。
我最终使用以下变通方法,该变通方法是:
1)将消息拆分为一个列表,每行都作为一个列表项
2)找出其中一个字符串的列表位置和结束字符串的位置。
3)生成一个新列表从#2中删除,然后重新生成相同的列表,切出最后一个字符(等号)
4)从新列表中生成一个字符串
5)搜索URL我想要
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("&","") #cleaner for some reason - encoding gives us random 3Ds + &s
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
答案 1 :(得分:0)
您应该检查Content-Transfer-Encoding
标头以查看它是否指定quoted-printable
,因为它看起来像quoted-printable编码的文本。
带引号的可打印编码旨在表示主要由八位字节组成的数据,这些八位字节对应于US-ASCII字符集中的可打印字符。它以一种方式对数据进行编码,使得生成的八位位组不太可能被邮件传输修改。如果要编码的数据大部分是US-ASCII文本,则数据的编码形式在很大程度上仍可以为人类所识别。完全为US-ASCII的正文也可以用Quoted-Printable进行编码,以确保消息通过字符转换和/或换行网关传递时,数据的完整性。
Python的quopri模块可用于以这种编码对电子邮件进行解码。
答案 2 :(得分:0)
我已经从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>
结果显示蓝色文本和红色背景。很好