我如何得到一个电子邮件的发件人gmail python API


def getbodyinbox():
service = build('gmail', 'v1', credentials=creds)
label_name = "READ-BY-SCRIPT"
label_id = 'Label_8507504117657095973'
results = service.users().messages().list(
userId='me', q="-label:"+label_name, maxResults=1).execute()
messages = results.get('messages', [])
body = []
if not messages:
body = "no messages"
return body
else:
for message in messages:
msg = service.users().messages().get(
userId='me', id=message['id']).execute()
labels = msg['labelIds']
if "INBOX" in labels:
headers = msg['payload']['headers']
headers = str(headers)
print(headers)
if "class_ix" in headers:
body.append(msg['payload']['parts'])
if 'data' in body[0][0]['body']:
body = base64.urlsafe_b64decode(
body[0][0]['body']['data'])
elif 'data' in body[0][1]['body']:
body = base64.urlsafe_b64decode(
body[0][1]['body']['data'])
body = str(body)

return body

print(getbodyinbox())

这是我的代码到目前为止,得到凭据删除的部分。它获取最近的电子邮件的正文,但不带"READ-BY-SCRIPT"标签,该标签也带有INBOX。我如何调整它以获得电子邮件的发送者?

您可以在Message ->有效载荷→标题

你只需要匹配header['name'] == 'From'并得到等价的header['value']

示例消息响应体(用于标头):

{
"payload": {
"partId": "",
"mimeType": "multipart/alternative",
"filename": "",
"headers": [

{
"name": "From",
"value": "User u003cuser@email.comu003e"
},

.....
{
"name": "Subject",
"value": "TEST EMAIL"
},
],
}
}

示例代码:

headers = msg['payload']['headers']
for header in headers: # getting the Sender
if header['name'] == 'From':
msg_from = header['value']
break

注意:

报头发送者值有这样一种格式:"User u003cuser@email.comu003e"

您可以通过解析从开始到u003c标记的字符串来获得发件人的名称,而您可以通过解析包含在u003cu003e标记中的字符串来获得发件人的电子邮件。

最新更新