[英]How to send an existing email to a new thread using gmail API
我正在尝试使用 Z9784E91C7B2657917226 中的 gmail API 将现有的 email 发送到另一个线程。
上下文:我创建了一条新消息 object 并成功使In-Reply-To
、 References
和threadId
分别等于message_id
和thread_id
。 (遵循Gmail 的 API 参考)
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
创建的,即使上面代码中的 print 语句显示相同的threadId
。
然后,当我按照此线程中的代码示例进行操作时:
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
线程?
注意:我在这里找到了 javascript和 java 的类似问题,但没有找到 python 的答案。
从您提供的链接中的信息可以收集到,您不需要提供In-Reply-To
和References
来启用线程,在请求正文中提供threadId
并使原始消息正文中的Subject
匹配,如在文档中指定就足够了。
请执行以下修改:
删除行message['threadId'] = thread_id
- threadId 属于请求正文,而不是消息正文
样本:
def create_message(sender, to, subject, thread_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
raw = base64.urlsafe_b64encode(message.as_bytes())
raw = raw.decode()
body = {'raw': raw, 'threadId':thread_id}
messages = service.users().messages()
send = messages.send(userId='me', body=body).execute()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.