Ada*_*ker 3 python gmail mime-message gmail-api
我正在尝试通过 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())}
Run Code Online (Sandbox Code Playgroud)
其中 和thread_id都是message_idMIME 消息 ID,格式类似于<CAGvK4+WJmQGjg6R_QT4rJQApFPeH2xV14DnAVcksTtrc7giE8A@mail.gmail.com>.
我尝试将 更改为由(类似)message['threadId']返回的值,同时将和标头保留为 MIME 消息 ID,但这也不起作用(事实上,这使得邮件无法在 Gmail和Outlook 中线程化)。threadIdcreateMessage168f38ab8c831d11In-Reply-ToReferences
任何帮助表示赞赏!我已经尝试了几乎所有我能想到的设置这些标题的组合,但没有成功。谢谢你!
对于将来遇到此问题的任何人,我都能弄清楚!
看起来将threadId标头设置为message['threadId'],将In-Reply-To标头设置为电子邮件地址(在我的例子中为发件人),并将References标头设置为 MIME Message-ID 足以使消息在收件人端线程化,但在发件人端则不然。在很多情况下,这没问题,但我希望发件人的邮箱保持井井有条,因此有必要进行线程处理。
为了让消息在发送者一侧线程化,您需要threadId在消息之外添加一个附加参数raw:
{'raw': base64.urlsafe_b64encode(message.as_string()), 'threadId': thread_id}
Run Code Online (Sandbox Code Playgroud)
现在,我的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())}
Run Code Online (Sandbox Code Playgroud)
在哪里:
reply_to是一个布尔值,指示正在创建的特定消息是对线程的回复还是全新消息thread_id是message['threadId'],应该看起来像168f809fbb5e9838message_id是 MIME Message-ID 标头,应该类似于<CAGvK4+W5G3KnYQmjvcpTJ=OCfvPQeWUHcLJG39JVGX4V3y1efA@mail.gmail.com>我希望有人觉得这有帮助!
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |