Het kan zijn dat u vaak e-mails naar veel accounts moet verzenden met behulp van programma's voor authenticatie en vele andere doeleinden.

Het SMTP-protocol definieert standaarden die e-mailcommunicatie tussen mailservers en mailtransferagents mogelijk maken, terwijl het IMAP-protocol voor het ontvangen van e-mails is.

Go biedt functionaliteit voor e-mailgerelateerde activiteiten gedefinieerd door de RFC in het net/smtp-pakket, dat ook 8BITMIME-, AUTH- en STARTTLS-extensies bevat.

De code die in dit project wordt gebruikt, is beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

E-mails verzenden in Go met behulp van het Net/SMTP-pakket

Het net/smtp-pakket maakt deel uit van de Go-standaardbibliotheek, dus u hoeft geen extern pakket te installeren. U hoeft het pakket alleen te importeren voordat u het gebruikt.

importeren (
"netto/smtp"
"logboek"
"crypto/tls"
"fmt"
)

U moet ook de log pakket om fouten naar de console te loggen en de crypto/tls pakket om een ​​veilige verbinding te configureren.

Nadat u het net/smtp-pakket hebt geïmporteerd, moet u a. schrijven Verzend mail() functie om de e-mail te verzenden en roep vervolgens de functie op in de hoofdfunctie.

funchoofd() {
fmt. Afdrukken (SendMail())
}
funcVerzend mail()snaar {
// Voeg hier code toe
}

De Verzend mail() functie zou de code bevatten die de e-mail naar de ontvangers verzendt.

Hoe het verzenden van e-mails werkt

Het SMTP-protocol definieert de parameters die elke mail moet hebben. Deze parameters zijn de e-mailadressen van de afzender en ontvanger, een poort waarop de e-mail wordt verzonden, een hostserver en een bericht.

Bovenstaande parameters zijn belangrijk voor het versturen van e-mails.

In deze zelfstudie leert u hoe u Yahoo-e-mails kunt verzenden. Het proces is echter hetzelfde voor elke Mail Server Provider (MSP) die u gebruikt.

Aangezien u Yahoo Mail gebruikt, logt u in op uw Yahoo Mail account, ga verder naar Account informatie, en klik op de accountbeveiliging tabblad. Genereer vervolgens een app-wachtwoord. U moet de app een naam geven en Yahoo Mail zal een wachtwoord voor de app maken en u kunt het wachtwoord in uw code samen met uw e-mailadres gebruiken.

In de Verzend mail() functie, declareer je drie variabelen; een variabele die de tekenreeks van uw e-mail bevat, een die uw e-mailwachtwoord bevat en een tekenreeks die het e-mailadres bevat waarnaar u berichten verzendt.

van := "[email protected]"
wachtwoord := "aSecurePasswordHier"
naar := "[email protected]"

Je kunt een plakje gebruiken en loop door de elementen als u van plan bent ze naar meerdere ontvangers te sturen.

De e-mailhost en poort ophalen en instellen

Het SMTP-protocol gebruikt de host- en poortnummers om de e-mailbron te identificeren. Dit is waar uw MSP van pas komt. U moet het host- en poortnummer weten dat uw MSP u toestaat te gebruiken.

Bekijk deze bron voor een lijst met MSP-hosts en: poortnummers als u openbare e-mails zoals Gmail, Yahoo of Outlook gebruikt. Google heeft "minder veilige apps" voor Gmail uitgeschakeld; misschien wilt u uw toepassing beveiligen als u Gmail gebruikt.

Zodra u het poortnummer en het hostadres hebt, wijst u ze toe aan variabelen zoals deze:

host := "smtp.mail.yahoo.com"
poort := "465"

De host- en poortnummers hierboven zijn van Yahoo Mail voor gebruik op reguliere accounts. De server wordt gehost op smtp.mail.yahoo.com, en je mag port gebruiken 465 om e-mails te verzenden.

De inhoud van de e-mail declareren

De volgende stap is om de inhoud van de mail als variabelen te declareren. Het onderwerp en de body vormen de boodschap.

subject := "Hé, ik controleer je gewoon."
body := "Ik hoop dat het goed met je gaat! Hoe gaat het met je vandaag. "

De onderwerp variabele is het onderwerp van de e-mail; de lichaam variabele is de hoofdtekst van de e-mail die u verzendt.

De e-mailheaders instellen

U moet een kaart met tekenreeksen maken om de koppen van de e-mail aan te duiden.

koppen := maken(kaart[snaar]snaar)
headers["Van"] = van
headers["Naar"] = naar
headers["Onderwerp"] = onderwerp
bericht := ""
voor k, v := bereik koppen {
bericht += fmt. Sprintf("%s: %s\r", k, v)
}
bericht += "\r" + body

Eerst maakt u een kaart met tekenreekssleutels en -waarden en stelt u de koppen van uw adres, het adres van de ontvanger en het onderwerp in, zoals hierboven weergegeven. Een range for-loop gebruiken op de kopteksten kaart, een bericht variabele wordt gedeclareerd om de headers en het bericht te bevatten met behulp van tekenreeksopmaak.

De e-mail verifiëren

De e-mail heeft authenticatie nodig om de bron te verifiëren. Het smtp-pakket biedt functionaliteit voor e-mailverificatie met behulp van de GewoonAuth. De PlainAuth methode neemt de identiteit, het e-mailadres van de afzender, het wachtwoord en de host op als parameters en retourneert een Authentiek object dat u gebruikt om de e-mail te verzenden.

authenticeren := smtp. PlainAuth("", van, wachtwoord, host)

De identiteit is uw gebruikersnaam, die leeg kan worden gelaten, zoals in dit geval te zien is.

Een verbinding maken voor de e-mail

Bij sommige e-mailserviceproviders moet u de e-mail via een verbinding verzenden. In dit artikel maken we een TCP-verbinding naar de server met TLS-configuraties.

tlsConfig := &tls. configuratie{
OnveiligSkipVerifiëren: WAAR,
Servernaam: host,
}

In de bovenstaande code hebt u een TLS-configuratie gemaakt door te verwijzen naar de Configuratie structureren waar OnveiligOverslaanVerifiëren was ingesteld op WAAR, en de servernaam is toegewezen aan de gastheer variabel.

U moet een TCP-verbinding maken met behulp van de Kies methode van de tls pakket. De bellen methode gebruikt het verbindingstype (TCP), in dit geval het serveradres en de TLS-verbindingsconfiguraties.


verbinding, err := tls. Dial("tcp", serverAddress, tlsConfig) err != nul {
logboek. Paniek (fout)
}

In de bovenstaande code heb je een TCP-verbinding gemaakt en fouten afgehandeld; je hebt een nieuw smtp-pakket gemaakt met behulp van de Nieuwe klant methode van de netto/smtp pakket. De Nieuwe klant methode neemt respectievelijk een verbinding en een host in beslag.

smtpClient, err := smtp. NewClient (verbinding, host)
als fout != nul {
logboek. Paniek (fout)
}

Nu je een. hebt gemaakt smtp client-instantie, moet u de parameters van de smtpClient en omgaan met fouten.

als err = smtpClient. Auth (authenticeren); fout != nul {
logboek. Paniek (fout)
}
als err = smtpClient. Mail van); fout != nul {
logboek. Paniek (fout)
}
als err = smtpClient. Rcpt (kopteksten ["Aan"]); fout != nul {
logboek. Paniek (fout)
}

In het bovenstaande voorbeeld heb je de authenticatie-, afzenderadres- en ontvangeradresparameters doorgegeven aan hun respectievelijke methoden en fouten afgehandeld.

Ten slotte moet u naar de verbindingsinstantie schrijven en dat kunt u doen door een schrijver te maken met behulp van de Gegevens methode van jouw smtp-client voorbeeld.

schrijver, err := smtpClient. Gegevens()
als fout != nul {
logboek. Paniek (fout)
}
_, err = schrijver. Schrijven([]byte(bericht))
als fout != nul {
logboek. Paniek (fout)
}

Nadat u een schrijver hebt gemaakt, schrijft u een byte-segment van het bericht met behulp van de Schrijven methode zoals in het bovenstaande voorbeeld.

err = schrijver. Dichtbij()
als fout != nul {
logboek. Paniek (fout)
}
err = smtpClient. Ontslag nemen()
als fout != nul {
opbrengst
}
opbrengst "Geslaagd, de mail is verzonden!"

Sluit de schrijver en sluit de smtp-clientverbindingsinstantie af met behulp van de bovenstaande code. De Verzend mail() functie retourneert een succesbericht, zoals hierboven weergegeven.

bij het bellen naar de Verzend mail() functie in de hoofd functie, moet u het succesbericht op uw console laten loggen en de e-mail naar uw ontvanger.

Er zit meer in het netpakket

Het net-pakket bevat veel pakketten voor netwerkgerelateerde functionaliteiten en het smtp-pakket is er slechts één van. U kunt de TCP- en HTTP-pakketten ook gebruiken voor netwerkgerelateerde ontwikkeling.

U vindt het net/smtp-pakket misschien overweldigend als u geen backend-ontwikkelaar bent. Er zijn veel andere alternatieven om snel e-mails te verzenden met minder regels code. U kunt e-mailmarketingbedrijven zoals SendGrid, Twilio en MailChimp bekijken en nieuwsbriefservices zoals Substack en Revue waarmee u zonder stress e-mails naar veel gebruikers kunt verzenden.