【发布时间】:2020-02-08 17:19:49
【问题描述】:
我正在尝试使用 Flask 中的 gmail API 将现有电子邮件发送到另一个线程。
背景:
我创建了一个新的消息对象并成功地使In-Reply-To、References 和threadId 分别等于message_id 和thread_id。 (关注Gmail's API reference)
def create_message(sender, to, subject, thread_id, message_id, message_text, service):
"""Create a message for an email.
Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.
Returns:
An object containing a base64url encoded email object.
"""
if type(message_text) != str:
message_text = str(message_text)
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
message['In-Reply-To'] = message_id
message['References'] = message_id
message['threadId'] = thread_id
print('created message threadId: %s does == ..' %message['threadId'])
print(thread_id)
raw = base64.urlsafe_b64encode(message.as_bytes())
raw = raw.decode()
body = {'raw': raw}
messages = service.users().messages()
send = messages.send(userId='me', body=body).execute()
问题:
我能够成功地将新邮件发送到我的收件箱,但它们是使用新的threadId 创建的,即使上面代码中的打印语句显示相同的threadId。
然后,当我按照代码示例from this thread:
body = {'message': {'raw': raw, 'threadId': thread_id}}
我收到以下错误:
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json returned "'raw' RFC822 payload message string or uploading message via /upload/* URL required">
问题:
如何生成这些电子邮件,以便它们使用相同的 threadId?
注意:我发现了类似的问题here for javascript和here for java,但没有找到python的答案。
【问题讨论】:
标签: python email flask gmail gmail-api