Det kan hende du ofte må sende e-post til mange kontoer ved å bruke programmer for autentisering og mange andre formål.
SMTP-protokollen definerer standarder som tillater e-postkommunikasjon på tvers av e-postservere og e-postoverføringsagenter, mens IMAP-protokollen er for å motta e-post.
Go gir funksjonalitet for e-postrelaterte aktiviteter definert av RFC i net/smtp-pakken, som også inneholder utvidelser 8BITMIME, AUTH og STARTTLS.
Koden som brukes i dette prosjektet er tilgjengelig i en GitHub Repository og er gratis for deg å bruke under MIT-lisensen.
Hvordan sende e-poster i Go ved hjelp av Net/SMTP-pakken
Net/smtp-pakken er en del av Go-standardbiblioteket, så du trenger ikke å installere noen ekstern pakke. Du trenger bare å importere pakken før du bruker den.
import (
"net/smtp"
"Logg"
"krypto/tls"
"fmt"
)
Du må også importere Logg pakken for å logge feil til konsollen og krypto/tls pakke for å konfigurere en sikker tilkobling.
Når du har importert net/smtp-pakken, bør du skrive en SendMail() funksjon for å sende posten og deretter kalle opp funksjonen i hovedfunksjonen.
funchoved-() {
fmt. Skriv ut (SendMail())
}
funcSendMail()streng {
// Legg til kode her
}
De SendMail() funksjonen vil inneholde koden som sender e-posten til mottakerne.
Slik fungerer det å sende e-poster
SMTP-protokollen definerer parameterne som hver e-post må ha. Disse parameterne er avsenderens og mottakerens e-postadresser, en port som e-posten sendes på, en vertsserver og en melding.
Parametrene nevnt ovenfor er viktige for å sende e-post.
I denne opplæringen lærer du å sende Yahoo-e-poster. Prosessen er imidlertid den samme for hvilken e-postserverleverandør (MSP) du bruker.
Siden du bruker Yahoo Mail, logg inn på din Yahoo Mail konto, gå videre til Kontoinformasjon, og klikk på Kontosikkerhet fanen. Generer deretter et app-passord. Du må gi appen et navn, og deretter oppretter Yahoo Mail et passord for appen, og du kan bruke passordet i koden din sammen med e-postadressen din.
I SendMail() funksjon, vil du erklære tre variabler; en variabel som inneholder strengen til e-posten din, en som inneholder e-postpassordet ditt, og en streng som inneholder e-postadressen du sender meldinger til.
fra := "[email protected]"
passord := "aSecurePasswordHere"
til := "[email protected]"
Du kan bruke en skive og sløyfe gjennom elementene hvis du har tenkt å sende dem til flere mottakere.
Få og stille inn e-postverten og -porten
SMTP-protokollen bruker verts- og portnumrene for å identifisere e-postkilden. Det er her din MSP kommer inn. Du må vite verten og portnummeret som MSP-en din tillater deg å bruke.
Sjekk denne ressursen for en liste over MSP-verter og portnumre hvis du bruker offentlige e-poster som Gmail, Yahoo eller Outlook. Google har slått av «mindre sikre apper» for Gmail; Det kan være lurt å sikre applikasjonen din hvis du bruker Gmail.
Når du har fått portnummeret og vertsadressen, tilordne dem til variabler som dette:
vert := "smtp.mail.yahoo.com"
port := "465"
Verts- og portnumrene ovenfor er fra Yahoo Mail for bruk på vanlige kontoer. Serveren er vert på smtp.mail.yahoo.com, og du har lov til å bruke port 465 å sende e-poster.
Erklære innholdet i e-posten
Det neste trinnet er å erklære innholdet i e-posten som variabler. Motivet og kroppen utgjør budskapet.
subject := "Hei, jeg bare sjekker deg."
body := "Håper du har det bra! Hvordan har du det i dag. "
De Emne variabel er emnet for e-posten; de kropp variabel er brødteksten til e-posten du sender.
Stille inn e-posthodene
Du må lage et kart over strenger for å angi overskriftene til e-posten.
overskrifter := gjøre(kart[streng]streng)
overskrifter["Fra"] = fra
overskrifter["Til"] = til
overskrifter["Emne"] = emne
melding := ""
til k, v := område overskrifter {
melding += fmt. Sprintf("%s: %s\r", k, v)
}
melding += "\r" + brødtekst
Først lager du et kart over strengnøkler og verdier og setter overskriftene til adressen din, mottakerens adresse og emnet, som vist ovenfor. Bruke en rekkevidde for-løkke på overskrifter kart, en beskjed variabel er erklært å inneholde overskriftene og meldingen ved bruk av strengformatering.
Autentisering av e-post
E-posten trenger autentisering for å bekrefte kilden. Smtp-pakken gir funksjonalitet for e-postautentisering ved hjelp av PlainAuth. De PlainAuth metoden tar inn identiteten, avsenderens e-post, passord og vert som parametere og returnerer en Auth objektet du vil bruke til å sende e-posten.
autentisere := smtp. PlainAuth("", fra, passord, vert)
Identiteten er brukernavnet ditt, som kan stå tomt, som vist i dette tilfellet.
Opprette en tilkobling for e-posten
Noen e-posttjenesteleverandører krever at du sender e-posten via en tilkobling. I denne artikkelen skal vi lage en TCP-tilkobling til serveren med TLS-konfigurasjoner.
tlsConfig := &tls. Config{
InsecureSkipVerify: ekte,
Servernavn: vert,
}
I koden ovenfor laget du en TLS-konfigurasjon ved å referere til Konfig strukturere hvor InsecureSkipVerify ble satt til ekte, og servernavnet ble tildelt til vert variabel.
Du må opprette en TCP-tilkobling ved å bruke Slå metoden for tls pakke. De slå metoden tar inn tilkoblingstypen (TCP), i dette tilfellet serveradressen og TLS-tilkoblingskonfigurasjonene.
tilkobling, feil := tls. Dial("tcp", serverAddress, tlsConfig) feil != null {
Logg. Panikk (feil)
}
I koden ovenfor opprettet du en TCP-tilkobling og håndterte feil; du har instansiert en ny smtp-pakke ved å bruke Ny klient metoden for nett/smtp pakke. De Ny klient metoden tar inn henholdsvis en tilkobling og en vert.
smtpClient, feil := smtp. NewClient (tilkobling, vert)
hvis feil!= null {
Logg. Panikk (feil)
}
Nå som du har opprettet en smtp klientforekomst, må du angi parameterne til smtpClient og håndtere feil.
hvis err = smtpClient. Auth (autentisere); feil!= null {
Logg. Panikk (feil)
}
hvis err = smtpClient. Mail (fra); feil!= null {
Logg. Panikk (feil)
}
hvis err = smtpClient. Rcpt (overskrifter["Til"]); feil!= null {
Logg. Panikk (feil)
}
I eksemplet ovenfor sendte du parametrene for autentisering, avsenderadresse og mottakeradresse til deres respektive metoder og håndterte feil.
Til slutt må du skrive til tilkoblingsforekomsten, og du kan gjøre det ved å opprette en forfatter ved å bruke Data metoden din smtp klient forekomst.
forfatter, feil := smtpClient. Data()
hvis feil!= null {
Logg. Panikk (feil)
}
_, feil = forfatter. Skrive([]byte(beskjed))
hvis feil!= null {
Logg. Panikk (feil)
}
Etter å ha opprettet en skribent, skriver du en bytebit av meldingen ved å bruke Skrive metode som i eksempelet ovenfor.
feil = forfatter. Lukk()
hvis feil!= null {
Logg. Panikk (feil)
}
err = smtpClient. Slutte()
hvis feil!= null {
komme tilbake
}
komme tilbake "Vellykket, posten ble sendt!"
Lukk skriveren og avslutt smtp-klienttilkoblingsforekomsten ved å bruke koden ovenfor. De SendMail() funksjonen returnerer en suksessmelding, som vist ovenfor.
Ved å ringe til SendMail() funksjon i hoved- funksjon, bør du få suksessmeldingen logget på konsollen og e-posten sendt til mottakeren.
Nettpakken har mer
Nettpakken inneholder mange pakker for nettverksrelaterte funksjoner og smtp-pakken er bare en av dem. Du kan også bruke TCP- og HTTP-pakkene for nettverksrelatert utvikling.
Du kan finne nett/smtp-pakken overveldende hvis du ikke er en backend-utvikler. Det finnes mange andre alternativer for å sende e-poster raskt med færre kodelinjer. Du kan sjekke ut e-postmarkedsføringsselskaper som SendGrid, Twilio og MailChimp og nyhetsbrevtjenester som Substack og Revue som lar deg sende e-post til mange brukere uten stress.