ホームページ >バックエンド開発 >Golang >Gmail Go SDK を使用してメールを送信する方法: メッセージ オブジェクト作成のパズルを解くには?

Gmail Go SDK を使用してメールを送信する方法: メッセージ オブジェクト作成のパズルを解くには?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 12:19:301009ブラウズ

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

Gmail Go SDK を使用してメールを送信する方法

問題:

Gmail Go SDK は、特に必要な Message オブジェクトを作成するための明確なドキュメントが不足しているため、難しい場合があります。メッセージ タイプのフィールドは主に電子メールの解析を容易にするため、電子メールを送信するための有効なペイロードを構築する方法が不明瞭なままです。

解決策:

API は複雑ですが、次の手順を参照してください。 Gmail Go SDK 経由でメールを送信するには:

1.メッセージ オブジェクトを作成します:

  • MessagePart インスタンス (p) を作成し、「From」、「To」、および「Subject」のヘッダーを追加します。
  • 電子メールをエンコードします。メッセージ (em) を Base64 文字列 (emsg) として抽出し、それをペイロードの生の値として設定します。

2. Gmail サービスの初期化:

  • ユーザーから OAuth トークンを取得し、それを使用して Gmail クライアントを初期化します。

3.電子メールの送信:

  • メッセージ オブジェクトを引数として Send メソッドを呼び出します。

4.ヘッダー値のエンコード:

  • RFC 2047 に準拠するには、「From」と「Subject」のヘッダー値をエンコードします。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。