Du skal muligvis ofte sende e-mails til mange konti ved hjælp af programmer til godkendelse og mange andre formål.

SMTP-protokollen definerer standarder, der tillader e-mail-kommunikation på tværs af mailservere og mailoverførselsagenter, mens IMAP-protokollen er til modtagelse af e-mails.

Go giver funktionalitet til e-mail-relaterede aktiviteter defineret af RFC i net/smtp-pakken, som også indeholder 8BITMIME, AUTH og STARTTLS-udvidelser.

Koden brugt i dette projekt er tilgængelig i en GitHub Repository og er gratis for dig at bruge under MIT-licensen.

Sådan sender du e-mails i Go ved hjælp af Net/SMTP-pakken

Net/smtp-pakken er en del af Go-standardbiblioteket, så du behøver ikke at installere nogen ekstern pakke. Du behøver kun at importere pakken, før du bruger den.

importere (
"net/smtp"
"log"
"crypto/tls"
"fmt"
)

Du skal også importere log pakke til at logge fejl til konsollen og krypto/tls pakke til at konfigurere en sikker forbindelse.

Når du har importeret net/smtp-pakken, skal du skrive en Send mail() funktion til at sende mailen og derefter kalde funktionen i hovedfunktionen.

funcvigtigste() {
fmt. Udskriv (SendMail())
}
funcSend mail()snor {
// Tilføj kode her
}

Det Send mail() funktion ville indeholde koden, der sender mailen til modtagerne.

Sådan fungerer det at sende e-mails

SMTP-protokollen definerer de parametre, som hver mail skal have. Disse parametre er afsenderens og modtagerens mailadresser, en port, som e-mailen sendes på, en værtsserver og en besked.

Ovenstående parametre er vigtige for afsendelse af e-mails.

I denne vejledning lærer du at sende Yahoo-e-mails. Processen er dog den samme for hvilken mailserverudbyder (MSP), du bruger.

Da du bruger Yahoo Mail, skal du logge ind på din Yahoo Mail konto, gå videre til Kontooplysninger, og klik på Kontosikkerhed fanen. Generer derefter en app-adgangskode. Du skal navngive appen, og derefter vil Yahoo Mail oprette en adgangskode til appen, og du kan bruge adgangskoden i din kode sammen med din e-mailadresse.

I den Send mail() funktion, vil du erklære tre variabler; en variabel, der indeholder strengen i din e-mail, en, der indeholder din e-mail-adgangskode, og en streng, der indeholder den e-mailadresse, du sender beskeder til.

fra := "[email protected]"
adgangskode := "aSecurePasswordHere"
til := "[email protected]"

Du kan bruge en skive og sløjfe gennem elementerne hvis du har til hensigt at sende dem til flere modtagere.

Hentning og indstilling af e-mail-vært og -port

SMTP-protokollen bruger værts- og portnumrene til at identificere e-mailkilden. Det er her din MSP kommer ind. Du skal kende værten og portnummeret, som din MSP tillader dig at bruge.

Tjek denne ressource for en liste over MSP-værter og portnumre hvis du bruger offentlige e-mails som Gmail, Yahoo eller Outlook. Google har slået "mindre sikre apps" fra for Gmail; du ønsker måske at sikre din applikation, hvis du bruger Gmail.

Når du har fået portnummeret og værtsadressen, skal du tildele dem til variabler som denne:

vært := "smtp.mail.yahoo.com"
port := "465"

Værts- og portnumrene ovenfor er fra Yahoo Mail til brug på almindelige konti. Serveren er hostet på smtp.mail.yahoo.com, og du har tilladelse til at bruge port 465 at sende e-mails.

Erklæring af indholdet af e-mailen

Det næste trin er at erklære indholdet af mailen som variabler. Emnet og kroppen udgør budskabet.

subject := "Hej, jeg kigger lige på dig."
body := "Håber du har det okay! Hvordan har du det i dag. "

Det emne variabel er emnet for e-mailen; det legeme variabel er brødteksten i den e-mail, du sender.

Indstilling af e-mail-headere

Du skal lave et kort over strenge for at angive e-mailens overskrifter.

overskrifter := lave(kort[snor]snor)
overskrifter["Fra"] = fra
overskrifter["Til"] = til
overskrifter["Emne"] = emne
besked := ""
til k, v := rækkevidde overskrifter {
besked += fmt. Sprintf("%s: %s\r", k, v)
}
besked += "\r" + brødtekst

Først opretter du et kort over strengnøgler og værdier og indstiller overskrifterne på din adresse, modtagerens adresse og emnet, som vist ovenfor. Brug af et interval for-loop på overskrifter kort, en besked variabel er erklæret til at indeholde overskrifterne og meddelelsen ved hjælp af strengformatering.

Autentificering af e-mail

E-mailen skal godkendes for at bekræfte kilden. smtp-pakken giver funktionalitet til e-mail-godkendelse ved hjælp af PlainAuth. Det PlainAuth metoden tager identiteten, afsenderens e-mail, adgangskode og vært ind som parametre og returnerer en Auth objekt, du skal bruge til at sende e-mailen.

autentificere := smtp. PlainAuth("", fra, adgangskode, vært)

Identiteten er dit brugernavn, som kan stå tomt, som det ses i dette tilfælde.

Oprettelse af en forbindelse til e-mailen

Nogle e-mail-udbydere kræver, at du sender e-mailen via en forbindelse. I denne artikel laver vi en TCP forbindelse til serveren med TLS-konfigurationer.

tlsConfig := &tls. Konfig{
InsecureSkipVerify: rigtigt,
Servernavn: vært,
}

I koden ovenfor lavede du en TLS-konfiguration ved at henvise til Konfig strukturere hvor InsecureSkipVerify blev sat til rigtigt, og servernavnet blev tildelt til vært variabel.

Du skal oprette en TCP-forbindelse ved hjælp af Urskive metoden til tls pakke. Det urskive metoden indtager forbindelsestypen (TCP), i dette tilfælde serveradressen og TLS-forbindelseskonfigurationerne.


forbindelse, fejl := tls. Dial("tcp", serverAddress, tlsConfig) fejl != nul {
log. Panik (fejl)
}

I koden ovenfor oprettede du en TCP-forbindelse og håndterede fejl; du har instantieret en ny smtp-pakke ved hjælp af Ny klient metoden til net/smtp pakke. Det Ny klient metode tager henholdsvis en forbindelse og vært ind.

smtpClient, fejl := smtp. NewClient (forbindelse, vært)
hvis fejl!= nul {
log. Panik (fejl)
}

Nu hvor du har oprettet en smtp klientforekomst, skal du indstille parametrene for smtpClient og håndtere fejl.

hvis fejl = smtpClient. Auth (autentificere); fejl!= nul {
log. Panik (fejl)
}
hvis fejl = smtpClient. Mail (fra); fejl!= nul {
log. Panik (fejl)
}
hvis fejl = smtpClient. Rcpt (headers["Til"]); fejl!= nul {
log. Panik (fejl)
}

I eksemplet ovenfor sendte du godkendelses-, afsenderadresse- og modtageradresseparametrene til deres respektive metoder og håndterede fejl.

Til sidst skal du skrive til forbindelsesinstansen, og det kan du gøre ved at oprette en forfatter ved hjælp af Data din metode smtp klient eksempel.

forfatter, fejl := smtpClient. Data()
hvis fejl!= nul {
log. Panik (fejl)
}
_, fejl = forfatter. Skrive([]byte(besked))
hvis fejl!= nul {
log. Panik (fejl)
}

Når du har oprettet en skribent, skriver du en byte udsnit af beskeden ved hjælp af Skrive metode som i eksemplet ovenfor.

fejl = forfatter. Tæt()
hvis fejl!= nul {
log. Panik (fejl)
}
fejl = smtpClient. Afslut()
hvis fejl!= nul {
Vend tilbage
}
Vend tilbage "Med succes, mailen blev sendt!"

Luk forfatteren og afslut smtp-klientforbindelsesinstansen ved hjælp af ovenstående kode. Det Send mail() funktion returnerer en succesmeddelelse, som vist ovenfor.

Ved at ringe til Send mail() funktion i vigtigste funktion, skal du få succesmeddelelsen logget på din konsol, og e-mailen sendt til din modtager.

Der er mere til netpakken

Netpakken indeholder mange pakker til netværksrelaterede funktionaliteter og smtp-pakken er blot en af ​​dem. Du kan også bruge TCP- og HTTP-pakkerne til netværksrelateret udvikling.

Du vil måske finde net/smtp-pakken overvældende, hvis du ikke er en backend-udvikler. Der er mange andre alternativer til at sende e-mails hurtigt med færre linjer kode. Du kan tjekke e-mail-marketingfirmaer som SendGrid, Twilio og MailChimp og nyhedsbrevstjenester som Substack og Revue, der giver dig mulighed for at sende e-mails til mange brugere uden stress.