Možda ćete često morati slati e-poštu na mnoge račune koristeći programe za provjeru autentičnosti i mnoge druge svrhe.

SMTP protokol definira standarde koji omogućuju komunikaciju e-poštom između poslužitelja e-pošte i agenata za prijenos pošte, dok je IMAP protokol za primanje e-pošte.

Go pruža funkcionalnost za aktivnosti vezane uz e-poštu definirane RFC-om u paketu net/smtp, koji također sadrži proširenja 8BITMIME, AUTH i STARTTLS.

Kod korišten u ovom projektu dostupan je u a GitHub spremište i besplatan je za korištenje pod MIT licencom.

Kako slati e-poštu u Go koristeći Net/SMTP paket

Paket net/smtp dio je standardne biblioteke Go, tako da ne morate instalirati nikakav vanjski paket. Trebate samo uvesti paket prije korištenja.

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

Također ćete morati uvesti log paket za bilježenje pogrešaka na konzolu i kripto/tls paket za konfiguriranje sigurne veze.

Nakon što uvezete net/smtp paket, trebali biste napisati a Poslati mail() funkciju za slanje pošte, a zatim pozovite funkciju u glavnoj funkciji.

instagram viewer
funkglavni() {
fmt. Ispis (SendMail())
}
funkPoslati mail()niz {
// Dodajte kod ovdje
}

The Poslati mail() funkcija bi sadržavala kod koji šalje poštu primateljima.

Kako funkcionira slanje e-pošte

SMTP protokol definira parametre koje svaka pošta mora imati. Ovi parametri su adrese e-pošte pošiljatelja i primatelja, port na koji se pošta šalje, glavni poslužitelj i poruka.

Gore navedeni parametri važni su za slanje e-pošte.

U ovom ćete vodiču naučiti slati Yahoo e-poštu. Međutim, postupak je isti za bilo kojeg davatelja poslužitelja pošte (MSP) koji koristite.

Budući da koristite Yahoo Mail, prijavite se na svoj Yahoo mail račun, idite na Informacije računa, i kliknite na Sigurnost računa tab. Zatim generirajte zaporku aplikacije. Morat ćete dati naziv aplikaciji, a zatim će Yahoo Mail stvoriti lozinku za aplikaciju, a vi možete koristiti lozinku u svom kodu zajedno s adresom e-pošte.

u Poslati mail() funkciju, deklarirat ćete tri varijable; varijablu koja sadrži niz vaše e-pošte, onu koja sadrži lozinku vaše e-pošte i niz koji sadrži adresu e-pošte na koju šaljete poruke.

from := "[email protected]"
lozinka := "aSecurePasswordovdje"
na := "[email protected]"

Možete koristiti krišku i petlja kroz elemente ako ih namjeravate poslati većem broju primatelja.

Dobivanje i postavljanje hosta i porta e-pošte

SMTP protokol koristi host i brojeve portova za identifikaciju izvora e-pošte. Ovdje na scenu stupa vaš MSP. Morate znati broj glavnog računala i porta koje vam vaš MSP dopušta.

Provjerite ovaj izvor za popis MSP hostova i brojevi portova ako koristite javne e-pošte kao što su Gmail, Yahoo ili Outlook. Google je isključio "manje sigurne aplikacije" za Gmail; možda biste trebali zaštititi svoju aplikaciju ako koristite Gmail.

Nakon što dobijete broj priključka i adresu glavnog računala, dodijelite ih varijablama poput ove:

host := "smtp.mail.yahoo.com"
luka := "465"

Gornji brojevi hosta i priključka su iz Yahoo Mail-a za korištenje na običnim računima. Poslužitelj se nalazi na adresi smtp.mail.yahoo.com i dopušteno vam je korištenje priključka 465 za slanje e-pošte.

Izjava o sadržaju e-pošte

Sljedeći korak je deklarirati sadržaj pošte kao varijable. Predmet i tijelo čine poruku.

predmet := "Hej, samo provjeravam kako si."
tijelo := "Nadam se da si dobro! Kako si danas. "

The subjekt varijabla je predmet e-pošte; the tijelo varijabla je tijelo e-poruke koju šaljete.

Postavljanje zaglavlja e-pošte

Morat ćete napraviti mapu nizova za označavanje zaglavlja e-pošte.

zaglavlja := napraviti(karta[niz]niz)
zaglavlja["Od"] = od
zaglavlja["Za"] = za
zaglavlja["Predmet"] = predmet
poruka := ""
za k, v := domet zaglavlja {
poruka += fmt. Sprintf("%s: %s\r", k, v)
}
poruka += "\r" + tijelo

Najprije stvorite mapu ključeva niza i vrijednosti i postavite zaglavlja svoje adrese, adrese primatelja i predmeta, kao što je prikazano gore. Korištenje raspona for-petlje na zaglavlja karta, a poruka varijabla je deklarirana tako da sadrži zaglavlja i poruku pomoću oblikovanja niza.

Provjera autentičnosti e-pošte

Za provjeru izvora e-pošte je potrebna provjera autentičnosti. Paket smtp pruža funkcionalnost za provjeru autentičnosti e-pošte pomoću PlainAuth. The PlainAuth metoda uzima identitet, e-poštu pošiljatelja, lozinku i host kao parametre i vraća Auth objekt koji ćete koristiti za slanje e-pošte.

provjeri autentičnost := smtp. PlainAuth("", from, password, host)

Identitet je vaše korisničko ime, koje može ostati prazno, kao što se vidi u ovom slučaju.

Stvaranje veze za e-poštu

Neki davatelji usluga e-pošte zahtijevaju slanje e-pošte putem veze. U ovom ćemo članku izraditi a TCP veza na poslužitelj s TLS konfiguracijama.

tlsConfig := &tls. Konfiguracija{
InsecureSkipVerify: pravi,
Ime poslužitelja: host,
}

U gornjem kodu napravili ste TLS konfiguraciju referenciranjem na Konfiguracija struct gdje InsecureSkipVerify je postavljen na pravi, a ime poslužitelja dodijeljeno je domaćin varijabla.

Morate stvoriti TCP vezu pomoću Biraj metoda tls paket. The dial metoda uzima vrstu veze (TCP), u ovom slučaju adresu poslužitelja i konfiguracije TLS veze.


veza, pogreška := tls. Dial("tcp", serverAddress, tlsConfig) err != nula {
log. Panika (greška)
}

U gornjem kodu ste uspostavili TCP vezu i obradili pogreške; instancirat ćete novi smtp paket koristeći NoviKlijent metoda net/smtp paket. The NoviKlijent metoda uzima vezu odnosno host.

smtpKlijent, pogreška := smtp. NewClient (veza, host)
ako pogriješiti != nula {
log. Panika (greška)
}

Sada kada ste izradili smtp instanci klijenta, morate postaviti parametre za smtpKlijent i rješavati pogreške.

ako pogreška = smtpKlijent. Auth (provjera autentičnosti); pogriješiti != nula {
log. Panika (greška)
}
ako pogreška = smtpKlijent. Pošta (od); pogriješiti != nula {
log. Panika (greška)
}
ako pogreška = smtpKlijent. Rcpt (zaglavlja["Do"]); pogriješiti != nula {
log. Panika (greška)
}

U gornjem primjeru proslijedili ste parametre provjere autentičnosti, adresu pošiljatelja i adresu primatelja njihovim odgovarajućim metodama i obradili pogreške.

Konačno, morate pisati u instancu veze, a to možete učiniti stvaranjem programa za pisanje koristeći Podaci tvoja metoda smtp klijent primjer.

pisac, griješi := smtpKlijent. Podaci()
ako pogriješiti != nula {
log. Panika (greška)
}
_, err = pisac. Pisati([]bajt(poruka))
ako pogriješiti != nula {
log. Panika (greška)
}

Nakon kreiranja programa za pisanje, pišete isječak bajta poruke pomoću Pisati metoda kao u gornjem primjeru.

griješiti = pisac. Zatvoriti()
ako pogriješiti != nula {
log. Panika (greška)
}
pogreška = smtpKlijent. Prestati()
ako pogriješiti != nula {
povratak
}
povratak "Uspješno, pošta je poslana!"

Zatvorite program za pisanje i napustite instancu veze smtp klijenta pomoću gornjeg koda. The Poslati mail() funkcija vraća poruku o uspjehu, kao što je prikazano gore.

Na poziv Poslati mail() funkcija u glavni trebali biste dobiti poruku o uspjehu zabilježenu na vašoj konzoli, a e-poštu` poslati vašem primatelju.

Paket Net ima više

Net paket sadrži mnoge pakete za mrežne funkcionalnosti, a smtp paket samo je jedan od njih. Također možete koristiti TCP i HTTP pakete za razvoj povezan s umrežavanjem.

Možda će vam paket net/smtp biti neodoljiv ako niste pozadinski programer. Postoje mnoge druge mogućnosti za brzo slanje e-pošte s manje redaka koda. Možete provjeriti tvrtke za marketing putem e-pošte kao što su SendGrid, Twilio i MailChimp i usluge slanja biltena kao što su Substack i Revue koje vam omogućuju slanje e-pošte mnogim korisnicima bez stresa.