我目前正在尝试编写一个简单的python邮件检查器作为我的应用程序的一部分,这很容易,但是我的目标是ProtonMail,它是PGP加密的电子邮件服务。好的,所以我尝试使用某人的convenient package,以实现与其API的交互。 几乎一切正常,至少我得到的对话和消息都很好。这是代码,尽管与示例代码几乎相同。
import json
from protonmail.client import Client
from protonmail.responses import ConversationsResponse, ConversationResponse
def check_mail(login, pwd):
result = []
client = Client(Username=login, blocking=True)
client.api.login(pwd)
conv_response = client.api.conversations(response=ConversationsResponse)
for conversation in conv_response.Conversations:
chain = client.api.conversations(conversation.ID, response=ConversationResponse)
for message in chain.Messages:
if (message.Unread):
message_data = client.read_message(message)
parsed = {
"ID": message.ID,
"From": "{}({})".format(message.Sender.Name, message.Sender.Address),
"msg": message.DecryptedBody
}
result.append(json.dumps(parsed))
# Here is my problem
client.api.conversations.read(method='PUT', body={'IDs': [conversation.ID]})
client.api.logout()
return result
带有注释的行显示了问题的开始位置。标记为读/删除和其他简单且应该起作用的PUT方法都是一样的。他们没有,响应说“输入无效”。
好的,然后我尝试通过Cnrome检查ProtonMail Web服务的交互。就像这样:
curl 'https://mail.protonmail.com/api/messages/delete'
-X PUT
-H 'Origin: https://mail.protonmail.com'
-H 'Accept-Encoding: gzip, deflate, br'
-H 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
-H 'x-pm-uid: 3dbe764aecac7d55ac56063c09016541e906bb5d'
-H 'Content-Type: application/json;charset=UTF-8'
-H 'Accept: application/vnd.protonmail.v1+json'
-H 'Referer: https://mail.protonmail.com/drafts'
-H 'Cookie: AUTH-93c7c114751231da1fb27d6560611f3f524eb655=%7B%22AccessToken%22%3A%22bc1a8818f7...<pretty-long-cookie-here>; Version=b; Session-Id=XHWusdxj7Rgh3Wq7J8OfoQAAALQ'
-H 'Connection: keep-alive'
-H 'x-pm-appversion: Web_3.15.19'
-H 'x-pm-apiversion: 3'
--data-binary '{"IDs":["oxawRWGqVIi1UKeZR60euCrynoOUjPJOP5PzcvC2oYgjIzA-Y-B0oUpUleoUh239OBSE46OQ9zLQSsV-49iZ1A=="]}'
--compressed
读取/未读取方法类似。
没有检查标头的全部,但是就消息接收而言,这些api方法也应该起作用...它们不=(
因此,我的问题包括两个部分:
protonmail
一起工作-这种方法有什么问题?包裹已过期或我做错了什么?requests
或urllib
库,手动发送请求应该可以工作(我在上面的curl命令中尝试过,一切正常),但是我不太满意。那么,那个“数据二进制” –应该是请求的主体吗?应该是JSON字符串还是以某种方式转义的JSON字符串?需要任何特殊的键吗?在此先感谢您的帮助。