繁体   English   中英

如何使用 gmail API 将现有 email 发送到新线程

[英]How to send an existing email to a new thread using gmail API

我正在尝试使用 Z9784E91C7B2657917226 中的 gmail API 将现有的 email 发送到另一个线程。

上下文:我创建了一条新消息 object 并成功使In-Reply-ToReferencesthreadId分别等于message_idthread_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-ToReferences来启用线程,在请求正文中提供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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM