SMTP -protokollen er en av byggesteinene til moderne internett. Protokollen fungerer som standarden for e-postoverføringer. Den består av en e -postserver og en e -postklient for å lette overføringen av e -post.
I denne guiden vil vi diskutere hvordan du kan sende e -post ved hjelp av SMTP -pakken i Go. For testing vil vi bruke en lokalt hostet SMTP -server ved hjelp av MailSlurper.
Golang Smtp
SMTP-pakken er en underpakke av Golang Net-pakken. Det implementerer funksjonalitet på høyt nivå for å jobbe med SMTP-protokoll.
La oss lære å sende e -post ved hjelp av SMTP -pakken.
SMTP -pakken gir en SendMail () -metode som lar deg sende e -post til den spesifiserte adressen.
Funksjonssyntaksen er som vist:
func sendmail (addr streng, en autoritet, fra streng, til [] streng, msg [] byte) feil
Funksjonen aksepterer adressen til SMTP -serveren som en streng, en autentiseringsmekanisme, e -postadresse å sende fra, e -postadressen å sende til, og e -postmeldingen som parametere.
E -postmeldingen skal starte med overskriften, en tom linje og e -postlegemet. Du bør avslutte hver linje i meldingen med CRLF -tegn, noe som tillater samsvar med RFC 822 e -poststil.
Følgende kode viser et enkelt eksempel på å bruke sendmail -funksjonen for å sende en e -post.
pakkehoved
import (
"FMT"
"Logg"
"Net/SMTP"
)
const (
Brukernavn = "Linuxhint"
Passwd = "Passord"
Vert = "localhost"
)
func main ()
fra: = "
[email protected] "
til: = [] streng
"
[email protected] ",
msg: = [] byte ("Fra:
[email protected] \ r \ n " +
"Til:
[email protected] " +
"Emne: Golang Testing Mail \ r \ n" +
"E -post kropp: velkommen til å gå!\ r \ n ")
AUTH: = SMTP.Plainauth ("", brukernavn, passwd, vert)
feil: = SMTP.Sendmail (Host+": 25", Auth, fra, til, MSG)
Hvis feil != nil
Logg.Fatal (feil)
fmt.Println ("Mail sendt vellykket!")
I eksemplet over begynner vi med å importere de nødvendige pakkene. Vi spesifiserer deretter de nødvendige variablene. I vårt eksempel angir vi brukernavn, passord og verten.
I hovedfunksjonen setter vi avsenderen til e -posten og mottakeren ved å bruke henholdsvis fra og til variabler.
Neste kommer e -postorganet, vi bruker RFC 822 -stil for å konstruere meldingen. Merk at hver linje er atskilt med CRLF -tegn.
Deretter bygger vi autentiseringen ved hjelp av PlainAuth -metoden. Funksjonen tar identiteten, brukernavnet, passordet og vert og gir en vanlig autoritetsmekanisme med serveren. Funksjonen går deretter tilbake til et autorisasjonsobjekt.
Til slutt sender vi e -posten ved hjelp av Sendmail -funksjonen som passerer adressen, Auth -objektet, avsenderen, mottakeren og meldingen som argumenter.
MailSlurper Auth Method
Hvis du kjører koden over på MailSlurper, vil serveren returnere en feil som nedenfor og lukke tilkoblingen.
$ gå kjør e -postmeldinger.gå
2022/02/02 02:52:39 SMTP: Server støtter ikke Auth
Avslutt status 1
Du kan løse dette ved å bruke en tilpasset sendmail -funksjon. Et eksempelkode er som vist nedenfor:
pakkehoved
import (
"koding/base64"
"FMT"
"Logg"
"Net/SMTP"
"Strenger"
)
const (
Brukernavn = "Linuxhint"
Passwd = "Passord"
Vert = "localhost"
)
func main ()
fra: = "
[email protected] "
til: = [] streng
"
[email protected] ",
msg: = [] byte ("E -post kropp: velkommen til å gå!\ r \ n ")
err: = sendmail (vert+": 2500", fra "Golang Testing E -post", String (MSG), til)
Hvis feil != nil
Logg.Fatal (feil)
fmt.Println ("Mail sendt vellykket!")
func sendmail (addr, fra, emne, kroppsstreng, til [] streng) feil
r: = strenger.NewReplacer ("\ r \ n", "", "\ r", "", "\ n", "", "%0a", "", "%0D", "")
C, feil: = SMTP.Dial (addr)
Hvis feil != nil
Returner feil
utsetter c.Lukk()
Hvis feil = C.Post (r.Erstatte (fra)); feil != nil
Returner feil
for i: = rekkevidde til
til [i] = r.Erstatte (til [i])
Hvis feil = C.Rcpt (til [i]); feil != nil
Returner feil
W, feil: = C.Data()
Hvis feil != nil
Returner feil
msg: = "til:" + strenger.Bli med (til, ",") + "\ r \ n" +
"Fra:" + fra + "\ r \ n" +
"Emne:" + emne + "\ r \ n" +
"Innholdstype: tekst/html; charset =" utf-8 "\ r \ n" +
"Innholdsoverføring-koding: base64 \ r \ n" +
"\ r \ n" + base64.Sttencoding.EncodetoString ([] byte (kropp))
_, err = w.Skriv ([] byte (MSG))
Hvis feil != nil
Returner feil
err = w.Lukk()
Hvis feil != nil
Returner feil
retur c.Slutte()
Golang Send Mail - Karbonkopi
Du kan også sende e -post til flere brukere ved hjelp av karbonkopi og blind karbonkopi. CC -mottakere vil være synlige for alle.
Vi kan gjøre dette ved å bruke koden som nedenfor:
pakkehoved
import (
"FMT"
"Logg"
"Net/SMTP"
"Strenger"
)
Skriv inn poststruktur
Avsenderstreng
Til [] streng
CC [] streng
BCC [] streng
Emne streng
Kroppsstreng
func main ()
avsender: = "
[email protected]"
til: = [] streng
"
[email protected] ",
"
[email protected] ",
"
[email protected]",
cc: = [] streng
"
[email protected] ",
"En
[email protected] ",
Brukernavn: = "Linuxhint"
passwd: = "passord"
Vert: = "localhost"
Emne: = "Golang Mail Test"
Kropp: = "Melding kropp"
req: = mail
Avsender: avsender,
Til: til,
CC: CC,
Emne: Emne,
Kropp: Kropp,
MSG: = Composemsg (Req)
AUTH: = SMTP.Plainauth ("", brukernavn, passwd, vert)
feil: = SMTP.Sendmail (Host+": 2500", Auth, avsender, til, [] byte (MSG))
Hvis feil != nil
Logg.Fatal (feil)
fmt.Println ("Melding sendt vellykket!")
// konstruere melding basert på CC
func composemsg (mail mail) streng
// tom streng
msg: = ""
// Sett avsender
msg += fmt.Sprintf ("Fra: %s \ r \ n", post.Avsender)
// Hvis mer enn 1 mottaker
Hvis Len (Mail.Til)> 0
msg += fmt.Sprintf ("CC: %s \ r \ n", strenger.Bli med (Mail.CC, ";"))
// Legg til emne
msg += fmt.Sprintf ("Emne: %S \ r \ n", Mail.Emne)
// Legg til postlegeme
msg += fmt.Sprintf ("Body: %s \ r \ n", post.Kropp)
Returner MSG
Ovennevnte kode vil sende e -postene til de spesifiserte mottakerne ved hjelp av SMTP -protokollen.
Lukking
I denne guiden utforsket vi det grunnleggende om å bruke SMTP -pakken i GO for å sende e -post til en eller flere brukere. Sjekk dokumentasjonen for å lære mer.