Vous devrez peut-être souvent envoyer des e-mails à de nombreux comptes à l'aide de programmes d'authentification et à de nombreuses autres fins.
Le protocole SMTP définit les normes qui permettent la communication par courrier électronique entre les serveurs de messagerie et les agents de transfert de courrier, tandis que le protocole IMAP est destiné à la réception des courriers électroniques.
Go fournit des fonctionnalités pour les activités liées aux e-mails définies par la RFC dans le package net/smtp, qui contient également les extensions 8BITMIME, AUTH et STARTTLS.
Le code utilisé dans ce projet est disponible dans un Référentiel GitHub et est libre d'utilisation sous la licence MIT.
Comment envoyer des e-mails dans Go à l'aide du package Net/SMTP
Le package net/smtp fait partie de la bibliothèque standard Go, vous n'avez donc pas besoin d'installer de package externe. Il vous suffit d'importer le package avant de l'utiliser.
importer (
"net/smtp"
"Journal"
"crypto/tls"
"fmt"
)
Vous devrez également importer le
Journal package pour consigner les erreurs dans la console et le crypto/tls package pour configurer une connexion sécurisée.Une fois que vous avez importé le paquet net/smtp, vous devez écrire un Envoyer un mail() fonction pour envoyer le courrier, puis appelez la fonction dans la fonction principale.
fonctionprincipale() {
fmt. Imprimer (EnvoyerMail())
}
fonctionEnvoyer un mail()chaîne de caractères {
// Ajouter le code ici
}
La Envoyer un mail() fonction contiendrait le code qui envoie le courrier aux destinataires.
Comment fonctionne l'envoi d'e-mails
Le protocole SMTP définit les paramètres que chaque courrier doit avoir. Ces paramètres sont les adresses e-mail de l'expéditeur et du destinataire, un port sur lequel le courrier est envoyé, un serveur hôte et un message.
Les paramètres indiqués ci-dessus sont importants pour l'envoi d'e-mails.
Dans ce didacticiel, vous apprendrez à envoyer des e-mails Yahoo. Cependant, le processus est le même quel que soit le fournisseur de serveur de messagerie (MSP) que vous utilisez.
Puisque vous utilisez Yahoo Mail, connectez-vous à votre yahoo Mail compte, dirigez-vous vers Informations de compte, et cliquez sur le Sécurité du compte languette. Générez ensuite un mot de passe d'application. Vous devrez nommer l'application, puis Yahoo Mail créera un mot de passe pour l'application, et vous pourrez utiliser le mot de passe dans votre code avec votre adresse e-mail.
Dans le Envoyer un mail() fonction, vous déclarerez trois variables; une variable contenant la chaîne de votre adresse e-mail, une autre contenant votre mot de passe de messagerie et une chaîne contenant l'adresse e-mail à laquelle vous envoyez des messages.
de := "[email protected]"
password := "aSecurePasswordHere"
à := "[email protected]"
Vous pouvez utiliser une tranche et boucle à travers les éléments si vous avez l'intention de les envoyer à plusieurs destinataires.
Obtention et configuration de l'hôte et du port de messagerie
Le protocole SMTP utilise les numéros d'hôte et de port pour identifier la source de l'e-mail. C'est là qu'intervient votre MSP. Vous devez connaître l'hôte et le numéro de port que votre MSP vous autorise à utiliser.
Consultez cette ressource pour obtenir une liste des hôtes MSP et numéros de port si vous utilisez des e-mails publics tels que Gmail, Yahoo ou Outlook. Google a désactivé les "applications moins sécurisées" pour Gmail; vous voudrez peut-être sécuriser votre application si vous utilisez Gmail.
Une fois que vous avez le numéro de port et l'adresse de l'hôte, affectez-les à des variables comme celle-ci :
hôte := "smtp.mail.yahoo.com"
port := "465"
Les numéros d'hôte et de port ci-dessus proviennent de Yahoo Mail pour une utilisation sur des comptes réguliers. Le serveur est hébergé sur smtp.mail.yahoo.com, et vous êtes autorisé à utiliser le port 465 pour envoyer des e-mails.
Déclaration du contenu de l'e-mail
L'étape suivante consiste à déclarer le contenu du courrier sous forme de variables. Le sujet et le corps composent le message.
subject := "Hey, je suis juste en train de te surveiller."
body := "J'espère que tu vas bien! Comment ça va aujourd'hui. "
La matière la variable est l'objet de l'e-mail; la corps variable est le corps de l'e-mail que vous envoyez.
Définition des en-têtes d'e-mail
Vous devrez créer une carte de chaînes pour indiquer les en-têtes de l'e-mail.
en-têtes := Fabriquer(carte[chaîne de caractères]chaîne de caractères)
en-têtes["De"] = de
en-têtes["À"] = à
en-têtes["Sujet"] = sujet
msg := ""
pour k, v := intervalle en-têtes {
message += fmt. Sprintf("%s: %s\r", k, v)
}
message += "\r" + corps
Tout d'abord, vous créez une carte de clés et de valeurs de chaîne et définissez les en-têtes de votre adresse, l'adresse du destinataire et le sujet, comme indiqué ci-dessus. Utilisation d'une boucle for range sur le en-têtes carte, une message La variable est déclarée pour contenir les en-têtes et le message en utilisant le formatage de chaîne.
Authentification de l'e-mail
L'e-mail doit être authentifié pour vérifier la source. Le package smtp fournit des fonctionnalités pour l'authentification des e-mails à l'aide du PlainAuth. La PlainAuth La méthode prend l'identité, l'e-mail de l'expéditeur, le mot de passe et l'hôte comme paramètres et renvoie un Authentification objet que vous utiliserez pour envoyer l'e-mail.
authentifier := smtp. PlainAuth("", de, mot de passe, hôte)
L'identité est votre nom d'utilisateur, qui peut être laissé vide, comme on le voit dans ce cas.
Création d'une connexion pour le courrier électronique
Certains fournisseurs de services de messagerie exigent que vous envoyiez l'e-mail via une connexion. Dans cet article, nous allons faire une Connexion TCP au serveur avec les configurations TLS.
tlsConfig := &tls. Configuration{
InsecureSkipVerify: vrai,
Nom du serveur: hôte,
}
Dans le code ci-dessus, vous avez fait une configuration TLS en référençant le Configuration structure où Non sécuriséIgnorerVérifier était fixé à vrai, et le nom du serveur a été attribué au héberger variable.
Vous devez créer une connexion TCP en utilisant le Cadran méthode de la tls forfait. La cadran prend en compte le type de connexion (TCP), dans ce cas, l'adresse du serveur et les configurations de connexion TLS.
connexion, erreur := tls. Dial("tcp", serverAddress, tlsConfig) err != néant {
Journal. Panique (euh)
}
Dans le code ci-dessus, vous avez établi une connexion TCP et géré les erreurs; vous aurez instancié un nouveau paquet smtp en utilisant le Nouvelle cliente méthode de la réseau/smtp forfait. La Nouvelle cliente La méthode prend respectivement une connexion et un hôte.
smtpClient, erreur := smtp. NouveauClient (connexion, hôte)
si erreur != néant {
Journal. Panique (euh)
}
Maintenant que vous avez créé un smtp instance client, vous devez définir les paramètres de client smtp et gérer les erreurs.
si erreur = smtpClient. Auth (authentifier); erreur != néant {
Journal. Panique (euh)
}
si erreur = smtpClient. Courrier de); erreur != néant {
Journal. Panique (euh)
}
si erreur = smtpClient. Rcpt (en-têtes["À"]); erreur != néant {
Journal. Panique (euh)
}
Dans l'exemple ci-dessus, vous avez transmis les paramètres d'authentification, d'adresse de l'expéditeur et d'adresse du destinataire à leurs méthodes respectives et géré les erreurs.
Enfin, vous devez écrire dans l'instance de connexion, et vous pouvez le faire en créant un écrivain à l'aide de la Données méthode de votre client smtp exemple.
écrivain, err := smtpClient. Données()
si erreur != néant {
Journal. Panique (euh)
}
_, err = écrivain. Écrire([]octet(message))
si erreur != néant {
Journal. Panique (euh)
}
Après avoir créé un rédacteur, vous écrivez une tranche d'octet du message à l'aide de la Écrire méthode comme dans l'exemple ci-dessus.
erreur = écrivain. Proche()
si erreur != néant {
Journal. Panique (euh)
}
erreur = smtpClient. Quitter()
si erreur != néant {
revenir
}
revenir "Bien réussi, le mail a été envoyé !"
Fermez l'écrivain et quittez l'instance de connexion client smtp en utilisant le code ci-dessus. La Envoyer un mail() La fonction renvoie un message de réussite, comme indiqué ci-dessus.
En appelant le Envoyer un mail() fonction dans le principale fonction, vous devriez recevoir le message de réussite enregistré sur votre console et l'e-mail envoyé à votre destinataire.
Il y a plus dans le forfait Net
Le package net contient de nombreux packages pour les fonctionnalités liées au réseau et le package smtp n'est que l'un d'entre eux. Vous pouvez également utiliser les packages TCP et HTTP pour le développement lié à la mise en réseau.
Vous pourriez trouver le paquet net/smtp écrasant si vous n'êtes pas un développeur backend. Il existe de nombreuses autres alternatives pour envoyer des e-mails rapidement avec moins de lignes de code. Vous pouvez consulter des sociétés de marketing par e-mail comme SendGrid, Twilio et MailChimp et des services de newsletter comme Substack et Revue qui vous permettent d'envoyer des e-mails à de nombreux utilisateurs sans stress.