Python –将ProtonMail邮件标记为已读

时间:2019-03-03 21:45:12

标签: python python-3.x http curl python-requests

我目前正在尝试编写一个简单的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方法也应该起作用...它们不=(

因此,我的问题包括两个部分:

  1. 如果有人偶然与protonmail一起工作-这种方法有什么问题?包裹已过期或我做错了什么?
  2. 使用一些requestsurllib库,手动发送请求应该可以工作(我在上面的curl命令中尝试过,一切正常),但是我不太满意。那么,那个“数据二进制” –应该是请求的主体吗?应该是JSON字符串还是以某种方式转义的JSON字符串?需要任何特殊的键吗?

在此先感谢您的帮助。

0 个答案:

没有答案