【发布时间】:2020-12-04 03:43:01
【问题描述】:
我目前正在从事一个项目,我选择使用 Gmail 来发送和接收电子邮件。我希望能够发送电子邮件,让用户回复并解析他们的回复。响应可以是任意数量的行(因此response.split('\n')[0] 之类的内容将不起作用)。然后它应该能够直接回复该电子邮件线程。
我一直在关注googleapiclient tutorials,但他们还有很多不足之处。但是,我设法使用以下方法阅读了电子邮件线程:
service.users.threads().get(userId='me', id=thread_id).execute()
thread_id 是(可以预见的)电子邮件线程的 ID(我在其他地方找到)。在此返回的大字典中,有一段 base64 数据包含电子邮件的内容。这是我唯一能找到响应的实际数据的地方。不幸的是,我在解码时得到了这个:
b'This is my response from my phone\r\n\r\nOn Sat, 28 Nov 2020, 8:40 PM , <myemail@gmail.com>\r\nwrote:\r\n\r\n> This is sent from the python script\r\n>\r\n'
这是线程中的所有数据,但是,我只想要响应,因为显然没有办法将其拆分以仅获取我需要的数据。我能想到的最好的方法是解析出On <date>, <time> 形式的任何内容,但这可能会导致问题。必须有另一种方法来仅提取This is my response from my phone 而没有其他数据。
收到响应后,我想对其进行解析并根据消息的内容做出适当的响应。我宁愿直接回复该主题,而不是开始一个新主题。不幸的是,所有谷歌文档都说:
如果您尝试发送回复并希望将电子邮件串起来,请确保:
- 主题标头匹配
- References 和 In-Reply-To 标头遵循 RFC 2822 标准。
文档提供了此代码(我做了一些小的修改)用于发送电子邮件:
def create_message(sender, to, subject, message_text):
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}
发送具有相同主题行的回复非常简单 (message['subject'] = same_subject_as_before),但我什至不知道从哪里开始使用 References 和 In-Reply-To 标头。如何设置这些?
【问题讨论】:
标签: python email gmail google-api-client