Dažnai gali tekti siųsti el. laiškus į daugelį paskyrų naudojant autentifikavimo programas ir daugeliu kitų tikslų.
SMTP protokolas apibrėžia standartus, leidžiančius bendrauti el. paštu per pašto serverius ir pašto perdavimo agentus, o IMAP protokolas skirtas gauti el.
„Go“ teikia su el. paštu susijusią veiklą, kurią RFC apibrėžia net/smtp pakete, kuriame taip pat yra 8BITMIME, AUTH ir STARTTLS plėtiniai.
Šiame projekte naudojamas kodas yra a „GitHub“ saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Kaip siųsti el. laiškus „Go“ naudojant „Net“ / SMTP paketą
Net/smtp paketas yra Go standartinės bibliotekos dalis, todėl jums nereikia diegti jokio išorinio paketo. Jums tereikia importuoti pakuotę prieš naudojant.
importuoti (
"net/smtp"
"rąstas"
"crypto/tls"
"fmt"
)
Taip pat turėsite importuoti žurnalas paketą, kad įrašytumėte klaidas į konsolę ir crypto/tls paketą saugiam ryšiui sukonfigūruoti.
Kai importuosite net/smtp paketą, turėtumėte parašyti a Išsiųsti laišką() paštu išsiųsti ir iškviesti funkciją pagrindinėje funkcijoje.
funcpagrindinis() {
fmt. Spausdinti (SendMail())
}
funcIšsiųsti laišką()styga {
// Pridėkite kodą čia
}
The Išsiųsti laišką() funkcijoje būtų kodas, kuris siunčia laišką gavėjams.
Kaip veikia el. laiškų siuntimas
SMTP protokolas apibrėžia parametrus, kuriuos turi turėti kiekvienas paštas. Šie parametrai yra siuntėjo ir gavėjo pašto adresai, prievadas, kuriuo siunčiamas paštas, pagrindinis serveris ir pranešimas.
Aukščiau nurodyti parametrai yra svarbūs siunčiant el.
Šioje pamokoje sužinosite, kaip siųsti „Yahoo“ el. Tačiau procesas yra vienodas bet kokiam pašto serverio teikėjui (MSP), kurį naudojate.
Kadangi naudojate „Yahoo Mail“, prisijunkite prie savo Yahoo paštas sąskaitą, eikite į Sąskaitos info, ir spustelėkite Paskyros apsauga skirtuką. Tada sugeneruokite programos slaptažodį. Turėsite pavadinti programą, tada „Yahoo Mail“ sukurs programos slaptažodį, kurį galėsite naudoti kode kartu su savo pašto adresu.
Viduje Išsiųsti laišką() funkciją, deklaruosite tris kintamuosius; kintamasis, kuriame yra jūsų el. pašto eilutė, tas, kuriame yra jūsų el. pašto slaptažodis, ir eilutė, kurioje yra el. pašto adresas, kuriuo siunčiate pranešimus.
iš := "jūsųpaš[email protected]"
slaptažodis := "aSecurePasswordHere"
į := "[email protected]"
Galite naudoti griežinėlį ir kilpa per elementus jei ketinate juos išsiųsti keliems gavėjams.
El. pašto prieglobos ir prievado gavimas ir nustatymas
SMTP protokolas naudoja pagrindinio kompiuterio ir prievado numerius, kad nustatytų el. pašto šaltinį. Čia atsiranda jūsų MSP. Turite žinoti pagrindinio kompiuterio ir prievado numerį, kurį jums leidžia naudoti MSP.
Šiame šaltinyje patikrinkite MSP prieglobų sąrašą ir prievado numeriai jei naudojate viešuosius el. laiškus, pvz., „Gmail“, „Yahoo“ ar „Outlook“. „Google“ išjungė „mažiau saugias programas“ „Gmail“; galbūt norėsite apsaugoti programą, jei naudojate „Gmail“.
Gavę prievado numerį ir pagrindinio kompiuterio adresą, priskirkite juos tokiems kintamiesiems:
priegloba := "smtp.mail.yahoo.com"
prievadas := "465"
Aukščiau pateikti pagrindinio kompiuterio ir prievado numeriai yra iš Yahoo Mail, skirti naudoti įprastose paskyrose. Serveris yra smtp.mail.yahoo.com ir jums leidžiama naudoti prievadą 465 laiškams siųsti.
El. laiško turinio deklaravimas
Kitas žingsnis yra paskelbti laiško turinį kaip kintamuosius. Tema ir kūnas sudaro pranešimą.
tema := "Ei, aš tik tave tikrinu."
body := „Tikiuosi, kad tau viskas gerai! Kaip tau šiandien sekasi. "
The tema kintamasis yra el. laiško tema; į kūnas kintamasis yra siunčiamo el. laiško turinys.
Laiškų antraščių nustatymas
Turėsite sudaryti eilučių žemėlapį, žymintį el. laiško antraštes.
antraštės := padaryti(žemėlapį[styga]styga)
antraštės ["Nuo"] = nuo
headers ["Kam"] = į
headers["Tema"] = tema
žinutė := ""
dėl k, v := diapazonas antraštės {
žinutė += fmt. Sprintf("%s: %s\r", k, v)
}
pranešimas += "\r" + tekstas
Pirmiausia sukuriate eilučių raktų ir reikšmių žemėlapį ir nustatote savo adreso, gavėjo adreso ir temos antraštes, kaip parodyta aukščiau. Diapazono for-ciklo naudojimas antraštes žemėlapis, a žinutę kintamasis deklaruojamas kaip antraštės ir pranešimas naudojant eilutės formatavimą.
El. pašto autentifikavimas
El. paštu reikia autentifikuoti, kad būtų patvirtintas šaltinis. Smtp paketas suteikia el. pašto autentifikavimo funkciją naudojant PlainAuth. The PlainAuth metodas paima tapatybę, siuntėjo el. paštą, slaptažodį ir pagrindinį kompiuterį kaip parametrus ir grąžina Aut objektą, kurį naudosite siųsdami el. laišką.
autentifikuoti := smtp. PlainAuth("", nuo, slaptažodis, priegloba)
Tapatybė yra jūsų vartotojo vardas, kurį galima palikti tuščią, kaip matyti šiuo atveju.
Ryšio sukūrimas el
Kai kurie pašto paslaugų teikėjai reikalauja, kad el. laiškus siųstumėte per ryšį. Šiame straipsnyje mes padarysime a TCP ryšys į serverį su TLS konfigūracijomis.
tlsConfig := &tls. Config{
InsecureSkipVerify: tiesa,
Serverio pavadinimas: priegloba,
}
Aukščiau pateiktame kode atlikote TLS konfigūraciją, nurodydami konfig statyti kur InsecureSkipVerify buvo nustatytas tiesa, o serverio pavadinimas buvo priskirtas šeimininkas kintamasis.
Turite sukurti TCP ryšį naudodami Surinkite metodas tls paketą. The ciferblatas metodas paima ryšio tipą (TCP), šiuo atveju serverio adresą ir TLS ryšio konfigūracijas.
ryšys, klaida := tls. Dial("tcp", serverio adresas, tlsConfig) err != nulis {
žurnalas. Panika (klysta)
}
Aukščiau pateiktame kode užmezgėte TCP ryšį ir išsprendėte klaidas; jūs sukursite naują smtp paketą naudodami NewClient metodas net/smtp paketą. The NewClient metodas atitinkamai paima ryšį ir pagrindinį kompiuterį.
smtpClient, err := smtp. NewClient (ryšys, priegloba)
jeigu klysta! = nulis {
žurnalas. Panika (klysta)
}
Dabar, kai sukūrėte smtp kliento egzempliorius, turite nustatyti parametrus smtpClient ir tvarkyti klaidas.
jeigu err = smtpClient. Auth (autentifikuoti); klysta! = nulis {
žurnalas. Panika (klysta)
}
jeigu err = smtpClient. paštas (nuo); klysta! = nulis {
žurnalas. Panika (klysta)
}
jeigu err = smtpClient. Rcpt (antraštės ["Kam"]); klysta! = nulis {
žurnalas. Panika (klysta)
}
Aukščiau pateiktame pavyzdyje perdavėte autentifikavimo, siuntėjo adreso ir gavėjo adreso parametrus atitinkamiems metodams ir tvarkėte klaidas.
Galiausiai turite rašyti į ryšio egzempliorių ir tai galite padaryti sukurdami rašytoją naudodami Duomenys jūsų metodas smtp klientas instancija.
rašytojas, klysta := smtpClient. Duomenys ()
jeigu klysta! = nulis {
žurnalas. Panika (klysta)
}
_, klysta = rašytojas. Rašyti ([]baitas(žinutė))
jeigu klysta! = nulis {
žurnalas. Panika (klysta)
}
Sukūrę rašytoją, rašote pranešimo baitą naudodami Rašyti metodas, kaip nurodyta aukščiau esančiame pavyzdyje.
klysta = rašytojas. Uždaryti()
jeigu klysta! = nulis {
žurnalas. Panika (klysta)
}
err = smtpClient. išeiti ()
jeigu klysta! = nulis {
grąžinti
}
grąžinti "Sėkmingai, laiškas išsiųstas!"
Uždarykite rašytoją ir uždarykite smtp kliento ryšio egzempliorių naudodami aukščiau pateiktą kodą. The Išsiųsti laišką() funkcija grąžina sėkmės pranešimą, kaip parodyta aukščiau.
Paskambinus į Išsiųsti laišką() funkcija pagrindinis funkciją, sėkmės pranešimas turėtų būti užregistruotas jūsų konsolėje, o el. laiškas išsiųstas gavėjui.
Net pakete yra daugiau
Tinklo pakete yra daug su tinklu susijusių funkcijų paketų, o smtp paketas yra tik vienas iš jų. Taip pat galite naudoti TCP ir HTTP paketus su tinklų kūrimui.
Net/smtp paketas gali būti didžiulis, jei nesate užpakalinės programos kūrėjas. Yra daug kitų alternatyvų, kaip greitai išsiųsti el. laiškus naudojant mažiau kodo eilučių. Galite patikrinti el. pašto rinkodaros įmones, pvz., „SendGrid“, „Twilio“ ir „MailChimp“, ir informacinių biuletenių paslaugas, tokias kaip „Substack“ ir „Revue“, kurios leidžia siųsti el. laiškus daugeliui vartotojų be streso.