Rumah > pembangunan bahagian belakang > Golang > Cara Menghantar E-mel Menggunakan Gmail Go SDK: Menyelesaikan Teka-teki Penciptaan Objek Mesej?

Cara Menghantar E-mel Menggunakan Gmail Go SDK: Menyelesaikan Teka-teki Penciptaan Objek Mesej?

Barbara Streisand
Lepaskan: 2024-10-27 12:19:30
asal
1127 orang telah melayarinya

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

Cara Menghantar E-mel melalui Gmail Go SDK

Masalah:

Menghantar e-mel menggunakan Gmail Go SDK boleh mencabar, terutamanya disebabkan kekurangan dokumentasi yang jelas untuk mencipta objek Message yang diperlukan. Medan jenis Mesej terutamanya memudahkan penghuraian e-mel, menjadikannya tidak jelas cara membina muatan yang sah untuk menghantar e-mel.

Penyelesaian:

Walaupun API ini rumit, berikut ialah langkah untuk menghantar e-mel melalui Gmail Go SDK:

1. Cipta Objek Mesej:

  • Buat contoh MessagePart (p) dan tambahkan pengepala untuk "Dari," "Kepada," dan "Subjek."
  • Ekodkan e-mel mesej (em) sebagai rentetan base64 (emsg) dan tetapkannya sebagai nilai mentah muatan.

2. Mulakan Perkhidmatan Gmail:

  • Peroleh token OAuth daripada pengguna dan gunakannya untuk memulakan klien Gmail.

3. Hantar E-mel:

  • Gunakan kaedah Hantar dengan objek mesej sebagai hujah.

4. Kod Nilai Pengepala:

  • Untuk mematuhi RFC 2047, kodkan nilai pengepala untuk "Dari" dan "Subjek."

5. Ekodkan Isi Mesej:

  • Enkodkan kandungan mesej menggunakan pengekodan Web64.

Coretan Kod Tersuai:

<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>
Salin selepas log masuk

Dengan mengikuti langkah ini, anda boleh membina objek Mesej yang sah dan berjaya menghantar e-mel melalui Gmail Go SDK.

Atas ialah kandungan terperinci Cara Menghantar E-mel Menggunakan Gmail Go SDK: Menyelesaikan Teka-teki Penciptaan Objek Mesej?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan