将邮件发送到某个线程失败,即使我设置了标题";在回答「&&引用;参考资料; 环境 戈兰 GmailAPI(google.golang.org/api/gmail/v1) 问题

将邮件发送到某个线程失败,即使我设置了标题";在回答「&&引用;参考资料; 环境 戈兰 GmailAPI(google.golang.org/api/gmail/v1) 问题,go,google-api,gmail-api,Go,Google Api,Gmail Api,当我尝试向某个线程发送邮件时,设置了“回复”和“引用”标题,邮件无法附加到该线程 我的问题:你认为这个问题的原因是什么 信头 这里我附上邮件的标题 Received: from 487462728342 named unknown by gmailapi.google.com with HTTPREST; Thu, 19 Nov 2020 22:34:45 -0800 In-Reply-To: <CAMZJxVNx_GfH3mryUr78WD_N6ayz__H3=x7zTocOrWzbo+

当我尝试向某个线程发送邮件时,设置了“回复”和“引用”标题,邮件无法附加到该线程

我的问题:你认为这个问题的原因是什么

信头 这里我附上邮件的标题

Received: from 487462728342 named unknown by gmailapi.google.com with HTTPREST; Thu, 19 Nov 2020 22:34:45 -0800
In-Reply-To: <CAMZJxVNx_GfH3mryUr78WD_N6ayz__H3=x7zTocOrWzbo+kcnA@mail.gmail.com>
References: <CAMZJxVM8vEEeuMzzMUbVirk-Mx554putqNs=HyxikWGPSy-Ayw@mail.gmail.com> <CAMZJxVNx_GfH3mryUr78WD_N6ayz__H3=x7zTocOrWzbo+kcnA@mail.gmail.com>
X-Tracking-Address: hogehoge@gmail.com
Subject: Re: Hello
To: moriwm77@gmail.com
CC: hogehoge@gmail.com
BCC: 
Content-Type: multipart/mixed; boundary="===============1605854084=="
Date: Thu, 19 Nov 2020 22:34:45 -0800
Message-Id: <CAMZJxVPX-6dZyNy2cSu3eAUMUZ4p-ai62uOH6=MZY7LYq6O5Lg@mail.gmail.com>
From: moriwm77@gmail.com

--===============1605854084==
Content-Type: text/plain; charset="utf-8"

If...

--===============1605854084==--
“回复”标题和“参考”标题包含在“m.Headers”中。 像

m.Headers[“回复”]
// => 
m、 标题[“参考”]
// =>  
根据,如果要向线程添加草稿或消息,必须满足以下条件:

  • 请求的
    threadId
    必须在您随请求提供的消息或草稿中指定

  • 必须按照RFC 2822标准设置回复标题的
    参考

  • 主题
    标题必须匹配

  • 因此,必须指定
    threadId
    ,才能成功插入消息

    参考文献

    欢迎使用stack,请编辑您的问题并包含您的代码。如果没有看到您的代码,我们无法帮助您确定错误。您可以发布您正在使用的代码吗?此外,您在提出请求时是否收到任何错误?谢谢您的快速回复!我添加了我的代码@我没有收到任何错误。我只是在执行代码后发现邮件没有线程化。此外,我还发现邮件在其他邮件客户端(如Spark或mail(OSX))上被正确线程化。看起来它们并不仅仅是Gmail客户端的线程。因此,我想我的代码已经满足RFC2822。我怀疑,除了RFC2822之外,Gmail对邮件线程也有特殊要求。
    // SendMail send gmail.
    func (api *GSuiteAPI) SendMail(token *oauth2.Token, m Message) error {
        ctx := context.Background()
        srv, err := gmail.NewService(ctx, option.WithTokenSource(api.config.TokenSource(ctx, token)))
        if err != nil {
            return handleError(err)
        }
    
        boundary := "===============" + strconv.FormatInt(time.Now().Unix(), 10) + "=="
    
        sMail := []string{}
        for key, value := range m.Headers {
            sMail = append(sMail, key+": "+value)
        }
        sMail = append(sMail, "Subject: =?UTF-8?B?"+base64.StdEncoding.EncodeToString([]byte(m.Subject))+"?=")
        sMail = append(sMail, "To: "+strings.Join(m.To, ","))
        sMail = append(sMail, "CC: "+strings.Join(m.CC, ","))
        sMail = append(sMail, "BCC: "+strings.Join(m.BCC, ","))
        sMail = append(sMail, "Content-Type: multipart/mixed; boundary=\""+boundary+"\"")
    
        // Boby
        sMail = append(sMail, "")
        sMail = append(sMail, "--"+boundary)
        sMail = append(sMail, "Content-Type: text/plain; charset=\"utf-8\"")
        sMail = append(sMail, "")
        sMail = append(sMail, m.Body)
    
        log.Info().Msgf("%+v", strings.Join(sMail, "\r\n"))
    
        // Attachment
        for _, attachment := range m.Attachments {
            name := strings.Replace(attachment.Name, "\"", "", -1)
            sMail = append(sMail, "")
            sMail = append(sMail, "--"+boundary)
            sMail = append(sMail, "Content-Type: application/octet-stream; name=\""+name+"\"")
            sMail = append(sMail, "Content-Disposition: attachment; filename=\""+name+"\"")
            sMail = append(sMail, "Content-Transfer-Encoding: Base64")
            sMail = append(sMail, "")
            sMail = append(sMail, attachment.Data)
        }
    
        source := strings.Join(sMail, "\r\n")
    
        var message gmail.Message
    
        if api.mailConfig.Enable {
            message.Raw = base64.
                StdEncoding.
                EncodeToString([]byte(source))
            _, err = srv.Users.Messages.Send("me", &message).Do()
            if err != nil {
                return handleError(err)
            }
        }
    
        return nil
    }
    
    m.Headers["In-Reply-To"]
    // => <CAMZJxVNx_GfH3mryUr78WD_N6ayz__H3=x7zTocOrWzbo+kcnA@mail.gmail.com>
    
    m.Headers["References"]
    // => <CAMZJxVM8vEEeuMzzMUbVirk-Mx554putqNs=HyxikWGPSy-Ayw@mail.gmail.com> <CAMZJxVNx_GfH3mryUr78WD_N6ayz__H3=x7zTocOrWzbo+kcnA@mail.gmail.com>