Rumah > pembangunan bahagian belakang > Golang > Cara Menghantar E-mel dengan Berkesan dengan Gmail Go SDK: Panduan Langkah demi Langkah

Cara Menghantar E-mel dengan Berkesan dengan Gmail Go SDK: Panduan Langkah demi Langkah

Susan Sarandon
Lepaskan: 2024-10-28 08:08:30
asal
1163 orang telah melayarinya

How to Send Emails Effectively with the Gmail Go SDK: A Step-by-Step Guide

Menghantar E-mel dengan Gmail Go SDK

Menghantar e-mel melalui Gmail Go SDK boleh mencabar, kerana jenis Mesej diperlukan oleh kaedah penghantaran mempunyai dokumentasi yang terhad. Walau bagaimanapun, dengan kod berikut, anda boleh menghantar e-mel dengan berkesan menggunakan perkhidmatan:

<code class="go">import (
    "code.google.com/p/goauth2/oauth"
    "code.google.com/p/google-api-go-client/gmail/v1"
    log "github.com/golang/glog"

    "encoding/base64"
    "encoding/json"
    "net/mail"
    "strings"
    )


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

func (em *Email) SendMessage(cl *Client) error {
    config.ClientId = cl.Username //oauth clientID
    config.ClientSecret = cl.Password  //oauth client secret 

    t := &amp;oauth.Transport{
        Config:    config,
        Transport: http.DefaultTransport,
    }
    var tk oauth.Token
    err := json.Unmarshal([]byte(cl.Meta), &amp;tk)
    t.Token = &amp;tk
    if err != nil {
        log.Errorf("meta %v, err %v", cl.Meta, err)
        return err
    }
    gmailService, err := gmail.New(t.Client())
    if err != nil {
        log.Error(err)
        return err
    }

    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)),
    }

    _, err = gmailService.Users.Messages.Send("me", &amp;gmsg).Do()
    if err != nil {
        log.Errorf("em %v, err %v", gmsg, err)
        return err
    }
    return err
}



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

Kod yang dipertingkatkan ini:

  • Membina pengepala e-mel menggunakan net/mel untuk pematuhan MIME yang dipertingkatkan .
  • Mengekodkan e-mel menggunakan base64 dan menambahkannya pada medan Mentah jenis Mesej.
  • Menggunakan mel.Alamat untuk memformatkan alamat Dari dan Kepada dengan betul.

Atas ialah kandungan terperinci Cara Menghantar E-mel dengan Berkesan dengan Gmail Go SDK: Panduan Langkah demi Langkah. 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