Maison  >  Article  >  développement back-end  >  Puis-je envoyer des e-mails en Go sans utiliser de serveur SMTP ?

Puis-je envoyer des e-mails en Go sans utiliser de serveur SMTP ?

DDD
DDDoriginal
2024-10-25 20:27:02991parcourir

Can I Send Emails in Go Without Using an SMTP Server?

Envoi d'e-mails sans serveur SMTP dans Go

Question :

Vous souhaitez envoyer envoyez des e-mails en masse sans recourir à un serveur SMTP externe en raison de limitations d'utilisation. Pouvez-vous envoyer des emails sans serveur SMTP en utilisant la bibliothèque standard de Go ?

Réponse :

Pour envoyer des emails sans serveur SMTP, vous devez déléguer la tâche à un autre programme capable d'envoyer des emails. Dans les systèmes POSIX, le programme /usr/sbin/sendmail est souvent disponible à cet effet. Vous pouvez l'appeler avec l'option -t pour récupérer les adresses des destinataires à partir des en-têtes To du message.

Utilisation de la bibliothèque standard avec Sendmail

Vous pouvez utiliser l'os/exec , net/mail et net/textproto pour appeler Sendmail directement, mais le package gomail fournit une solution plus simple. Son type Message inclut une méthode WriteTo() qui peut écrire sur une instance Sendmail en cours d'exécution. Voici un exemple :

<code class="go">import (
    "os/exec"

    "github.com/go-gomail/gomail"
)

const sendmailPath = "/usr/sbin/sendmail"

func sendEmail(m *gomail.Message) error {
    cmd := exec.Command(sendmailPath, "-t")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    stdin, err := cmd.StdinPipe()
    if err != nil {
        return err
    }

    if err := cmd.Start(); err != nil {
        return err
    }

    if _, err := m.WriteTo(stdin); err != nil {
        return err
    }

    if err := stdin.Close(); err != nil {
        return err
    }

    if err := cmd.Wait(); err != nil {
        return err
    }

    return nil
}</code>

Avantages de l'utilisation d'un MTA :

Bien que l'utilisation d'un MTA puisse sembler une étape supplémentaire, elle offre l'avantage de la mise en file d'attente des messages. Si un MTA ne peut pas transmettre un message immédiatement, par exemple lors d'une panne de réseau, il stockera le message dans une file d'attente et tentera à plusieurs reprises de le transmettre jusqu'à ce qu'il réussisse ou qu'un délai d'attente se produise.

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