首页 >后端开发 >Golang >如何使用 Gmail Go SDK 发送电子邮件:解决消息对象创建难题?

如何使用 Gmail Go SDK 发送电子邮件:解决消息对象创建难题?

Barbara Streisand
Barbara Streisand原创
2024-10-27 12:19:301000浏览

How to Send Emails Using the Gmail Go SDK: Solving the Message Object Creation Puzzle?

如何通过 Gmail Go SDK 发送电子邮件

问题:

使用Gmail Go SDK 可能具有挑战性,特别是由于缺乏创建所需 Message 对象的明确文档。 Message 类型的字段主要促进电子邮件解析,因此不清楚如何构造用于发送电子邮件的有效负载。

解决方案:

尽管 API 很复杂,但以下是步骤通过 Gmail Go SDK 发送电子邮件:

1.创建消息对象:

  • 创建 MessagePart 实例 (p) 并添加“发件人”、“收件人”和“主题”标头。
  • 对电子邮件进行编码消息(em)作为base64字符串(emsg)并将其设置为有效负载的原始值。

2.初始化 Gmail 服务:

  • 从用户处获取 OAuth 令牌并使用它来初始化 Gmail 客户端。

3.发送电子邮件:

  • 以消息对象作为参数调用 Send 方法。

4.对标头值进行编码:

  • 为了符合 RFC 2047,请对“发件人”和“主题”的标头值进行编码。

5.对消息正文进行编码:

  • 使用 Web64 编码对消息正文进行编码。

自定义代码片段:

<code class="go">import (
    "encoding/base64"
    "encoding/json"
    "fmt"
    "log"
    "net/mail"
    "strings"

    gmail "google.golang.org/api/gmail/v1"
)

type Email struct {
    FromName, FromEmail, ToName, ToEmail, Subject string
    Message                                       string
}

func (em *Email) SendMessage(cl *Client) error {
    from := mail.Address{em.FromName, em.FromEmail}
    to := mail.Address{em.ToName, em.ToEmail}

    header := make(map[string]string)
    header["From"] = from.String()
    header["To"] = to.String()
    header["Subject"] = encodeRFC2047(em.Subject)
    header["MIME-Version"] = "1.0"
    header["Content-Type"] = "text/html; charset=\"utf-8\""
    header["Content-Transfer-Encoding"] = "base64"

    var msg string
    for k, v := range header {
        msg += fmt.Sprintf("%s: %s\r\n", k, v)
    }
    msg += "\r\n" + em.Message

    gmsg := gmail.Message{
        Raw: encodeWeb64String([]byte(msg)),
    }

    // Send the email using Gmail Service
    ...

    return nil
}

func encodeRFC2047(s string) string {
    // use mail's rfc2047 to encode any string
    addr := mail.Address{s, ""}
    return strings.Trim(addr.String(), " <>")
}

func encodeWeb64String(b []byte) string {
    s := base64.URLEncoding.EncodeToString(b)

    var i = len(s) - 1
    for s[i] == '=' {
        i--
    }

    return s[0 : i+1]
}</code>

按照以下步骤,您可以构造一个有效的 Message 对象,并通过 Gmail Go SDK 成功发送电子邮件。

以上是如何使用 Gmail Go SDK 发送电子邮件:解决消息对象创建难题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn