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
1009 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!

sumber:php.cn
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