使用Go msgraph-sdk-go库,我正在try 转发一条消息.如果我只有一个"收件人"收件人,我可以没有问题,但如果我有"抄送"和/或"密件抄送"收件人,我不能让他们添加到邮件.

Forward().Post()函数一起使用的普通questBody(users.NewItemMailFoldersItemMessagesItemForwardPostRequestBody())只有SetToRecipients()函数,但没有SetCcRecipients()SetBccRecipients()函数.

我try 了各种方法来解决这个问题,但我所做的最接近的try 仍然不起作用.我没有调用Forward().Post(),而是调用CreateForward().Post(),这将创建消息草稿,并返回消息对象(models.Messageable).

然后,我可以在该消息对象上调用SetToRecipients()SetCcRecipients()和/或SetBccRecipients()函数.然后,我对消息调用Patch()以将更改保存到服务器,然后调用Send(),但不断收到错误,指示没有定义收件人.

我正在使用的代码如下(简化):

func forwardMessage(id string, toRecipients []models.Recipientable, ccRecipients []models.Recipientable, bccRecipients []models.Recipientable) (success bool) {
    var err error
    var message models.Messageable
    var requestBody = users.NewItemMailFoldersItemMessagesItemForwardPostRequestBody()

    message, err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(id).CreateForward().Post(context.Background(), requestBody, nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    message.SetToRecipients(toRecipients)
    if len(ccRecipients) > 0 {
        message.SetCcRecipients(ccRecipients)
    }
    if len(bccRecipients) > 0 {
        message.SetBccRecipients(bccRecipients)
    }

    message, err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(*message.GetId()).Patch(context.Background(), message, nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(*message.GetId()).Send().Post(context.Background(), nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    return true
}

任何帮助弄清楚这一点的人都将不胜感激!

推荐答案

在反复try 了无数不同的场景后,我终于找到了解决方案!我不得不:

  • 在我调用createForward之前,将To Recipients应用于questBody.
  • 在从那次通话中收到新的(草稿)消息后,我保存了新的ID.
  • 初始化新邮件对象并将抄送/密件抄送收件人应用到该对象.
  • 在newid消息上调用Patch,传递重新初始化的消息对象.
  • 发送草稿消息.

更新后的代码如下:

func forwardMessage(id string, toRecipients []models.Recipientable, ccRecipients []models.Recipientable, bccRecipients []models.Recipientable) (success bool) {
    var err error
    var message models.Messageable
    var newID string
    var requestBody = users.NewItemMailFoldersItemMessagesItemForwardPostRequestBody()

    requestBody.SetToRecipients(toRecipients)

    message, err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(id).CreateForward().Post(context.Background(), requestBody, nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    newID = *message.GetId()
        
    message = models.NewMessage()
    message.SetToRecipients(toRecipients)
    if len(ccRecipients) > 0 {
        message.SetCcRecipients(ccRecipients)
    }
    if len(bccRecipients) > 0 {
        message.SetBccRecipients(bccRecipients)
    }

    _, err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(newID).Patch(context.Background(), message, nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    err = pClient.Users().ByUserId(cpMailbox).Messages().ByMessageId(newID).Send().Post(context.Background(), nil)
    if err != nil {
        fmt.Println(getOdataErrorV1(err).Error())
        return false
    }

    return true
}

Go相关问答推荐

Go在使用HTTP代理时如何处理DNS请求?

Websocket服务器实现与x/net库trowing 403

这种合并排序的实现有什么问题?

Go 中的sync.Cond 与 Wait 方法

testcontainers:如何修复绑定源路径不存在

Golang 发送Post请求出现400错误

Go test "-run -" 标志执行测试更快

一个Go module可以和之前的非module模块发布在同一个路径下吗?

使用 LINQ 对内部数组进行排序

获取 nil 指针类型的 reflect.Value

如何从 Asterisk Manager Interface Event 获取活动呼叫数

errors.Wrap 和 errors.WithMessage 有什么区别

访问传递给可变参数函数的通用 struct 的特定字段

Golang invopop jsonschema 使用 if/then/else

Golang grpc go.mod 问题

没有堆栈跟踪的 go 程序崩溃是什么意思?

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

将基本 HTTP AUth 用户/密码凭据存储在 GO 中,无需外部包

正则表达式处理数字签名的多个条目

如何使用 httputil.ReverseProxy 设置 X-Forwarded-For