Este posibil să fie nevoie adesea să trimiteți e-mailuri către mai multe conturi folosind programe de autentificare și multe alte scopuri.

Protocolul SMTP definește standarde care permit comunicarea prin e-mail între servere de e-mail și agenți de transfer de e-mail, în timp ce protocolul IMAP este pentru primirea de e-mailuri.

Go oferă funcționalități pentru activitățile legate de e-mail definite de RFC în pachetul net/smtp, care conține și extensii 8BITMIME, AUTH și STARTTLS.

Codul folosit în acest proiect este disponibil în a Depozitul GitHub și este gratuit pentru utilizare sub licența MIT.

Cum să trimiteți e-mailuri în Go utilizând pachetul Net/SMTP

Pachetul net/smtp face parte din biblioteca standard Go, așa că nu trebuie să instalați niciun pachet extern. Trebuie doar să importați pachetul înainte de a-l folosi.

import (
"net/smtp"
"Buturuga"
"cripto/tls"
"fmt"
)

De asemenea, va trebui să importați Buturuga pachet pentru a înregistra erorile în consolă și cripto/tls pachet pentru a configura o conexiune sigură.

instagram viewer

După ce ați importat pachetul net/smtp, ar trebui să scrieți a SendMail() pentru a trimite e-mailul și apoi apelați funcția din funcția principală.

funcprincipal() {
fmt. Imprimare (SendMail())
}
funcTrimite e-mail()şir {
// Adăugați codul aici
}

The SendMail() funcția ar conține codul care trimite e-mailul către destinatari.

Cum funcționează trimiterea de e-mailuri

Protocolul SMTP definește parametrii pe care trebuie să îi aibă fiecare e-mail. Acești parametri sunt adresele de e-mail ale expeditorului și destinatarului, un port pe care este trimis mesajul, un server gazdă și un mesaj.

Parametrii menționați mai sus sunt importanți pentru trimiterea de e-mailuri.

În acest tutorial, veți învăța să trimiteți e-mailuri Yahoo. Cu toate acestea, procesul este același pentru orice furnizor de server de e-mail (MSP) pe care îl utilizați.

Deoarece utilizați Yahoo Mail, conectați-vă la dvs Yahoo Mail cont, mergeți la Informatii cont, și faceți clic pe Securitatea contului fila. Apoi generați o parolă pentru aplicație. Va trebui să denumești aplicația, iar apoi Yahoo Mail va crea o parolă pentru aplicație și poți folosi parola din codul tău împreună cu adresa de e-mail.

În SendMail() funcție, veți declara trei variabile; o variabilă care deține șirul de e-mail, una care deține parola de e-mail și un șir care conține adresa de e-mail la care trimiteți mesajele.

de la := „[email protected]
parola := "aSecurePasswordHere"
la := „[email protected]

Puteți folosi o felie și buclă prin elemente dacă intenționați să le trimiteți mai multor destinatari.

Obținerea și setarea gazdei și portului de e-mail

Protocolul SMTP folosește numerele de gazdă și port pentru a identifica sursa de e-mail. Aici intervine MSP-ul tău. Trebuie să știți numărul de gazdă și portul pe care MSP-ul dvs. vă permite să le utilizați.

Verificați această resursă pentru o listă de gazde MSP și numere de port dacă utilizați e-mailuri publice precum Gmail, Yahoo sau Outlook. Google a dezactivat „aplicațiile mai puțin sigure” pentru Gmail; poate doriți să vă securizați aplicația dacă utilizați Gmail.

Odată ce aveți numărul portului și adresa gazdei, atribuiți-le variabilelor ca aceasta:

gazdă := „smtp.mail.yahoo.com”
port := "465"

Numerele gazdei și portului de mai sus sunt de la Yahoo Mail pentru a fi utilizate în conturi obișnuite. Serverul este găzduit la smtp.mail.yahoo.com și aveți voie să utilizați portul 465 pentru a trimite e-mailuri.

Declararea conținutului e-mailului

Următorul pas este să declarați conținutul e-mailului ca variabile. Subiectul și corpul alcătuiesc mesajul.

subiect := "Hei, doar te verific."
body := „Sper că te descurci bine! Cum te simţi azi. "

The subiect variabila este subiectul e-mailului; cel corp variabila este corpul e-mailului pe care îl trimiteți.

Setarea antetelor de e-mail

Va trebui să faceți o hartă de șiruri pentru a indica antetele e-mailului.

anteturi := face(Hartă[şir]şir)
headers["De la"] = de la
headers["To"] = to
headers["Subject"] = subiect
mesaj := ""
pentru k, v := gamă antete {
mesaj += fmt. Sprintf("%s: %s\r", k, v)
}
mesaj += "\r" + corp

Mai întâi, creați o hartă de chei și valori și setați antetele adresei dvs., adresa destinatarului și subiectul, așa cum se arată mai sus. Folosind un interval for-loop pe antete harta, a mesaj variabila este declarată pentru a conține antetele și mesajul folosind formatarea șirurilor.

Autentificarea e-mailului

E-mailul necesită autentificare pentru a verifica sursa. Pachetul smtp oferă funcționalitate pentru autentificarea e-mailului folosind PlainAuth. The PlainAuth metoda preia identitatea, e-mailul expeditorului, parola și gazda ca parametri și returnează un Auth obiect pe care îl veți folosi pentru a trimite e-mailul.

autentificare := smtp. PlainAuth("", de la, parola, gazda)

Identitatea este numele dvs. de utilizator, care poate fi lăsat necompletat, așa cum se vede în acest caz.

Crearea unei conexiuni pentru e-mail

Unii furnizori de servicii de poștă vă solicită să trimiteți e-mailul printr-o conexiune. În acest articol, vom realiza un Conexiune TCP la serverul cu configurații TLS.

tlsConfig := &tls. Configurare{
InsecureSkipVerify: Adevărat,
ServerName: gazdă,
}

În codul de mai sus, ați făcut o configurație TLS făcând referire la Config struct unde InsecureSkipVerify a fost setat la Adevărat, iar numele serverului i-a fost atribuit gazdă variabil.

Trebuie să creați o conexiune TCP folosind Apelează metoda de tls pachet. The formați metoda include tipul de conexiune (TCP), în acest caz, adresa serverului și configurațiile conexiunii TLS.


conexiune, err := tls. Dial("tcp", serverAddress, tlsConfig) err != zero {
Buturuga. Panică (eră)
}

În codul de mai sus, ați făcut o conexiune TCP și ați gestionat erori; veți fi instanțiat un nou pachet smtp folosind Client nou metoda de net/smtp pachet. The Client nou metoda preia o conexiune și, respectiv, o gazdă.

smtpClient, err := smtp. Client nou (conexiune, gazdă)
dacă gres!= zero {
Buturuga. Panică (eră)
}

Acum că ați creat un smtp instanță client, trebuie să setați parametrii smtpClient și gestionați erorile.

dacă err = smtpClient. Auth (autentificare); gres!= zero {
Buturuga. Panică (eră)
}
dacă err = smtpClient. Mail (de la); gres!= zero {
Buturuga. Panică (eră)
}
dacă err = smtpClient. Rcpt (anteturi[„Către”]); gres!= zero {
Buturuga. Panică (eră)
}

În exemplul de mai sus, ați trecut parametrii de autentificare, adresa expeditorului și adresa destinatarului la metodele respective și ați gestionat erorile.

În cele din urmă, trebuie să scrieți în instanța de conexiune și puteți face acest lucru creând un writer folosind Date metoda ta client smtp instanță.

scriitor, err := smtpClient. Date()
dacă gres!= zero {
Buturuga. Panică (eră)
}
_, err = scriitor. Scrie([]octet(mesaj))
dacă gres!= zero {
Buturuga. Panică (eră)
}

După ce creați un writer, scrieți o porțiune de octeți a mesajului folosind Scrie metoda ca în exemplul de mai sus.

err = scriitor. Închide()
dacă gres!= zero {
Buturuga. Panică (eră)
}
err = smtpClient. Părăsi()
dacă gres!= zero {
întoarcere
}
întoarcere "Succes, mailul a fost trimis!"

Închideți writer-ul și părăsiți instanța de conexiune client smtp folosind codul de mai sus. The SendMail() funcția returnează un mesaj de succes, așa cum se arată mai sus.

La apelarea SendMail() funcţia în principal funcția, ar trebui să primiți mesajul de succes conectat pe consola dvs., iar e-mailul să fie trimis destinatarului dvs.

Există mai multe în pachetul net

Pachetul net conține multe pachete pentru funcționalități legate de rețea, iar pachetul smtp este doar unul dintre ele. De asemenea, puteți utiliza pachetele TCP și HTTP pentru dezvoltarea în rețea.

S-ar putea să găsiți pachetul net/smtp copleșitor dacă nu sunteți un dezvoltator backend. Există multe alte alternative pentru a trimite rapid e-mailuri cu mai puține linii de cod. Puteți consulta companii de marketing prin e-mail precum SendGrid, Twilio și MailChimp și servicii de buletine informative precum Substack și Revue, care vă permit să trimiteți e-mailuri către mulți utilizatori fără stres.