我正在尝试通过Python中的Gmail API发送回复,但似乎无法让Gmail Web客户端对邮件进行处理。但是,它们正在Outlook中被线程化,这很奇怪。
这是我创建消息的方式:
def create_message(sender, to, subject, message_text, reply_to, thread_id, message_id):
message = MIMEText(message_text, 'html')
message['to'] = to
message['from'] = sender
message['subject'] = subject
if reply_to:
message['threadId'] = thread_id
message['In-Reply-To'] = message_id
message['References'] = message_id
return {'raw': base64.urlsafe_b64encode(message.as_string())}
其中
thread_id
和message_id
都是MIME邮件ID,格式类似于<CAGvK4+WJmQGjg6R_QT4rJQApFPeH2xV14DnAVcksTtrc7giE8A@mail.gmail.com>
。我尝试将
message['threadId']
更改为threadId
返回的createMessage
(类似168f38ab8c831d11
),同时将In-Reply-To
和References
标头保留为MIME消息ID,但这也不起作用(实际上,这会使邮件无法同时在Gmail和Outlook中运行)。任何帮助表示赞赏!我已经尝试过设置这些标头的每一种组合,但我很幸运。谢谢!
最佳答案
对于以后遇到此问题的任何人,我都能弄清楚!
看起来像将threadId
标头设置为message['threadId']
,将In-Reply-To
标头设置为电子邮件地址(在我的情况下为发件人),并且将References
标头设置为MIME Message-ID足以将消息传递到接收方,但不在发送方。在很多情况下,这很好,但是我希望发件人的邮箱保持井井有条,因此有必要在其中进行线程化。
为了使消息通过发件人侧,您需要在threadId
之外将raw
作为附加参数添加到消息中:
{'raw': base64.urlsafe_b64encode(message.as_string()), 'threadId': thread_id}
现在,我的
create_message
函数如下所示:def create_message(sender, to, subject, message_text, reply_to, thread_id, message_id):
message = MIMEText(message_text, 'html')
message['to'] = to
message['from'] = sender
message['subject'] = subject
if reply_to:
message['threadId'] = thread_id
message['In-Reply-To'] = sender
message['References'] = message_id
return {'raw': base64.urlsafe_b64encode(message.as_string()), 'threadId': thread_id}
return {'raw': base64.urlsafe_b64encode(message.as_string())}
哪里:
reply_to
是一个布尔值,指示正在创建的特定消息是对线程的答复还是全新消息thread_id
是message['threadId']
,应类似于168f809fbb5e9838
message_id
是MIME邮件ID标头,应类似于<CAGvK4+W5G3KnYQmjvcpTJ=OCfvPQeWUHcLJG39JVGX4V3y1efA@mail.gmail.com>
我希望有人觉得这有帮助!