我设法使用电子邮件标题(参考和回复中)让它在我回复时显示在同一个线程中,但是当我们再次交换电子邮件时,它们会出现在新线程中
我希望他们在同一个线程中
我遇到了同样的问题,最终通过按照此处的文档将
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