Maison  >  Article  >  développement back-end  >  Comment envoyer des e-mails à l'aide du SDK Gmail Go : résoudre le casse-tête de la création d'objets de message ?

Comment envoyer des e-mails à l'aide du SDK Gmail Go : résoudre le casse-tête de la création d'objets de message ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 12:19:30862parcourir

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

Comment envoyer un e-mail via le SDK Gmail Go

Problème :

Envoi d'e-mails à l'aide du Le SDK Gmail Go peut être difficile, notamment en raison du manque de documentation claire pour créer l'objet Message requis. Les champs du type de message facilitent principalement l'analyse des e-mails, ce qui laisse flou sur la façon de construire une charge utile valide pour l'envoi d'e-mails.

Solution :

Malgré la complexité de l'API, voici les étapes pour envoyer des e-mails via le SDK Gmail Go :

1. Créez un objet de message :

  • Créez une instance MessagePart (p) et ajoutez des en-têtes pour "De", "À" et "Objet".
  • Encodez l'e-mail message (em) sous forme de chaîne base64 (emsg) et définissez-le comme valeur brute de la charge utile.

2. Initialiser un service Gmail :

  • Acquérir un jeton OAuth auprès de l'utilisateur et l'utiliser pour initialiser un client Gmail.

3. Envoyer l'e-mail :

  • Invoquez la méthode Send avec l'objet message comme argument.

4. Encoder les valeurs d'en-tête :

  • Pour se conformer à la RFC 2047, encodez les valeurs d'en-tête pour "De" et "Sujet".

5. Encodez le corps du message :

  • Encodez le corps du message à l'aide de l'encodage Web64.

Extrait de code personnalisé :

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

En suivant ces étapes, vous pouvez créer un objet Message valide et envoyer avec succès des e-mails via le SDK Gmail Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn