首頁 >後端開發 >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