使用 gmail API 时,如何确保两个帐户的回复保持在同一线程中?

问题描述 投票:0回答:1

我设法使用电子邮件标题(参考和回复中)让它在我回复时显示在同一个线程中,但是当我们再次交换电子邮件时,它们会出现在新线程中

我希望他们在同一个线程中

gmail gmail-api
1个回答
0
投票

我遇到了同样的问题,最终通过按照此处的文档将

threadId
放入请求正文中来解决它:https://developers.google.com/gmail/api/reference/rest/v1/users。消息#消息

这是我的代码片段:

import axios from "axios"

export const sendEmail = async({ email,access_token }) => {

  const { from,to,subject,body,msgId } = email

  const rawMessage = [
    `From: me`,
    `To: ${to}`,
    `Subject: ${subject}`,
    msgId ? `In-Reply-To: ${msgId}` : null,
    msgId ? `References: ${msgId}` : null,
    ``,
    body,
  ].filter(Boolean).join(`\n`)

  const raw = Buffer.from(rawMessage).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`-`).replace(/=+$/,``)

  const payload = { raw }
  if(email.threadId) payload.threadId = email.threadId

  try {
    const { data } = await axios({
      method: `POST`,
      url: `https://gmail.googleapis.com/gmail/v1/users/me/messages/send`,
      headers: { Authorization: `Bearer ${access_token}` },
      data: payload,
    })
    console.log({ data })
    await logEvent({ email })
  } catch (err) {console.log(err.response?.data || err.message) }
}

因此您需要“References”和“In-Reply-To”标头以及响应正文中的 threadId。

func.live 上还有一个很好的函数可以做到这一点。值得一看:https://www.func.live/functions/gmail

© www.soinside.com 2019 - 2024. All rights reserved.