Morda boste morali pogosto pošiljati e-pošto na številne račune z uporabo programov za preverjanje pristnosti in številne druge namene.

Protokol SMTP določa standarde, ki omogočajo e-poštno komunikacijo med poštnimi strežniki in agenti za prenos pošte, medtem ko je protokol IMAP za prejemanje e-pošte.

Go ponuja funkcionalnost za dejavnosti, povezane z e-pošto, ki jih določa RFC v paketu net/smtp, ki vsebuje tudi razširitve 8BITMIME, AUTH in STARTTLS.

Koda, uporabljena v tem projektu, je na voljo v a Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.

Kako pošiljati e-pošto v Go z uporabo paketa Net/SMTP

Paket net/smtp je del standardne knjižnice Go, zato vam ni treba namestiti nobenega zunanjega paketa. Paket morate samo uvoziti, preden ga uporabite.

uvoz (
"net/smtp"
"log"
"kripto/tls"
"fmt"
)

Prav tako boste morali uvoziti dnevnik paket za beleženje napak v konzolo in kripto/tls paket za konfiguracijo varne povezave.

Ko uvozite paket net/smtp, morate napisati a Pošlji pošto() funkcijo za pošiljanje pošte in nato pokličite funkcijo v glavni funkciji.

funkglavni() {
fmt. Natisni (SendMail())
}
funkPošlji pošto()vrvica {
// Tukaj dodajte kodo
}

The Pošlji pošto() funkcija bi vsebovala kodo, ki pošlje pošto prejemnikom.

Kako deluje pošiljanje e-pošte

Protokol SMTP določa parametre, ki jih mora imeti vsaka pošta. Ti parametri so naslova pošiljatelja in prejemnika, vrata, na katera se pošilja pošta, gostiteljski strežnik in sporočilo.

Zgoraj navedeni parametri so pomembni za pošiljanje e-pošte.

V tej vadnici se boste naučili pošiljati e-pošto Yahoo. Vendar je postopek enak za katerega koli ponudnika poštnega strežnika (MSP), ki ga uporabljate.

Ker uporabljate Yahoo Mail, se prijavite v svoj Yahoo Mail račun, pojdite na Informacije o računu, in kliknite Varnost računa zavihek. Nato ustvarite geslo za aplikacijo. Aplikacijo boste morali poimenovati, nato pa bo Yahoo Mail ustvaril geslo za aplikacijo, geslo pa lahko uporabite v svoji kodi skupaj s svojim e-poštnim naslovom.

V Pošlji pošto() funkcijo, boste deklarirali tri spremenljivke; spremenljivka, ki vsebuje niz vašega e-poštnega sporočila, tista, ki vsebuje vaše geslo za e-pošto, in niz, ki vsebuje e-poštni naslov, na katerega pošiljate sporočila.

from := "[email protected]"
geslo := "aSecurePasswordHere"
na := "[email protected]"

Uporabite lahko rezino in zanko skozi elemente če jih nameravate poslati več prejemnikom.

Pridobivanje in nastavitev gostitelja in vrat e-pošte

Protokol SMTP uporablja številke gostitelja in vrat za identifikacijo vira e-pošte. Tukaj nastopi vaš MSP. Poznati morate gostitelja in številko vrat, ki vam jih vaš MSP dovoljuje.

Preverite ta vir za seznam gostiteljev MSP in številke vrat če uporabljate javna e-poštna sporočila, kot so Gmail, Yahoo ali Outlook. Google je izklopil "manj varne aplikacije" za Gmail; morda boste želeli zaščititi svojo aplikacijo, če uporabljate Gmail.

Ko dobite številko vrat in naslov gostitelja, ju dodelite spremenljivkam, kot je ta:

gostitelj := "smtp.mail.yahoo.com"
vrata := "465"

Zgornje številke gostitelja in vrat so iz Yahoo Mail za uporabo v običajnih računih. Strežnik gostuje na naslovu smtp.mail.yahoo.com in dovoljena vam je uporaba vrat 465 za pošiljanje e-pošte.

Objava vsebine e-pošte

Naslednji korak je, da deklarirate vsebino pošte kot spremenljivke. Zadeva in telo sestavljata sporočilo.

predmet := "Hej, samo preverjam te."
telo := "Upam, da si v redu! Kako si danes. "

The predmet spremenljivka je predmet e-pošte; the telo spremenljivka je telo e-pošte, ki ga pošiljate.

Nastavitev e-poštnih naslovov

Narediti boste morali zemljevid nizov za označevanje glav e-pošte.

glave := narediti(zemljevid[vrvica]vrvica)
headers["From"] = od
headers["To"] = to
headers["Subject"] = zadeva
sporočilo := ""
za k, v := obseg glave {
sporočilo += fmt. Sprintf("%s: %s\r", k, v)
}
sporočilo += "\r" + telo

Najprej ustvarite zemljevid nizovnih ključev in vrednosti ter nastavite glave svojega naslova, naslova prejemnika in zadeve, kot je prikazano zgoraj. Uporaba zanke obsega za glave zemljevid, a sporočilo spremenljivka je navedena tako, da vsebuje glave in sporočilo z uporabo oblikovanja niza.

Preverjanje pristnosti e-pošte

E-poštno sporočilo potrebuje preverjanje pristnosti, da preveri vir. Paket smtp nudi funkcionalnost za preverjanje pristnosti e-pošte z uporabo PlainAuth. The PlainAuth metoda vzame identiteto, pošiljateljev e-poštni naslov, geslo in gostitelja kot parametre ter vrne Auth predmet, ki ga boste uporabili za pošiljanje e-pošte.

overi := smtp. PlainAuth("", od, geslo, gostitelj)

Identiteta je vaše uporabniško ime, ki ga lahko pustite prazno, kot je prikazano v tem primeru.

Ustvarjanje povezave za e-pošto

Nekateri ponudniki poštnih storitev zahtevajo pošiljanje e-pošte prek povezave. V tem članku bomo naredili povezava TCP na strežnik s konfiguracijami TLS.

tlsConfig := &tls. Config{
InsecureSkipVerify: prav,
Ime strežnika: gostitelj,
}

V zgornji kodi ste naredili konfiguracijo TLS s sklicevanjem na Config struct kje InsecureSkipVerify je bilo nastavljeno na prav, ime strežnika pa je bilo dodeljeno gostitelj spremenljivka.

Ustvariti morate povezavo TCP z uporabo Dial metoda tls paket. The številčnica metoda zajema vrsto povezave (TCP), v tem primeru naslov strežnika in konfiguracije povezave TLS.


povezava, napaka := tls. Dial("tcp", serverAddress, tlsConfig) err != nič {
dnevnik. Panika (napaka)
}

V zgornji kodi ste vzpostavili povezavo TCP in obravnavali napake; instancirali boste nov paket smtp z uporabo NewClient metoda net/smtp paket. The NewClient metoda sprejme povezavo oziroma gostitelja.

smtpClient, napaka := smtp. NewClient (povezava, gostitelj)
če napaka!= nič {
dnevnik. Panika (napaka)
}

Zdaj, ko ste ustvarili smtp primerek odjemalca, morate nastaviti parametre za smtpClient in obravnavati napake.

če napaka = smtpClient. Auth (avtentikacija); napaka!= nič {
dnevnik. Panika (napaka)
}
če napaka = smtpClient. Pošta (od); napaka!= nič {
dnevnik. Panika (napaka)
}
če napaka = smtpClient. Rcpt (glave["Za"]); napaka!= nič {
dnevnik. Panika (napaka)
}

V zgornjem primeru ste posredovali parametre preverjanja pristnosti, naslova pošiljatelja in naslova prejemnika njihovim ustreznim metodam in obravnavali napake.

Končno morate pisati v instanco povezave in to lahko storite tako, da ustvarite zapisovalnik z uporabo podatki vaša metoda odjemalec smtp primerek.

pisatelj, napaka := smtpClient. podatki ()
če napaka!= nič {
dnevnik. Panika (napaka)
}
_, err = pisatelj. Napiši ([]bajt(sporočilo))
če napaka!= nič {
dnevnik. Panika (napaka)
}

Ko ustvarite zapisovalca, napišete bajtno rezino sporočila z uporabo Pišite način kot v zgornjem primeru.

err = pisatelj. Zapri()
če napaka!= nič {
dnevnik. Panika (napaka)
}
napaka = smtpClient. Prenehati()
če napaka!= nič {
vrnitev
}
vrnitev "Uspešno, pošta je bila poslana!"

Zaprite zapisovalnik in zaprite primerek povezave odjemalca smtp z uporabo zgornje kode. The Pošlji pošto() funkcija vrne sporočilo o uspehu, kot je prikazano zgoraj.

Ob klicu na Pošlji pošto() funkcijo v glavni funkcijo, bi moralo biti sporočilo o uspehu zabeleženo na vaši konzoli in e-poštno sporočilo poslano prejemniku.

Paket Net ponuja še več

Paket net vsebuje veliko paketov za omrežne funkcionalnosti in paket smtp je le eden izmed njih. Za razvoj, povezan z omrežjem, lahko uporabite tudi paketa TCP in HTTP.

Morda se vam zdi paket net/smtp preobremenjen, če niste razvijalec zaledja. Obstaja veliko drugih možnosti za hitro pošiljanje e-pošte z manj vrsticami kode. Ogledate si lahko podjetja za e-poštno trženje, kot so SendGrid, Twilio in MailChimp, ter storitve glasila, kot sta Substack in Revue, ki vam omogočajo pošiljanje e-pošte številnim uporabnikom brez stresa.