Iespējams, jums bieži būs jānosūta e-pasta ziņojumi uz daudziem kontiem, izmantojot autentifikācijas programmas un daudziem citiem mērķiem.
SMTP protokols nosaka standartus, kas nodrošina e-pasta saziņu starp pasta serveriem un pasta pārsūtīšanas aģentiem, savukārt IMAP protokols ir paredzēts e-pasta saņemšanai.
Go nodrošina funkcionalitāti ar e-pastu saistītām darbībām, kuras RFC definējis net/smtp pakotnē, kurā ir arī paplašinājumi 8BITMIME, AUTH un STARTTLS.
Šajā projektā izmantotais kods ir pieejams a GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.
Kā nosūtīt e-pasta ziņojumus Go, izmantojot tīkla/SMTP pakotni
Net/smtp pakotne ir daļa no Go standarta bibliotēkas, tāpēc jums nav jāinstalē ārēja pakotne. Pirms lietošanas iepakojums ir tikai jāimportē.
imports (
"net/smtp"
"baļķis"
"crypto/tls"
"fmt"
)
Jums būs arī jāimportē žurnāls pakotni, lai reģistrētu kļūdas konsolē un crypto/tls pakotni, lai konfigurētu drošu savienojumu.
Kad esat importējis net/smtp pakotni, jums vajadzētu rakstīt a
Nosūtīt pastu() funkciju, lai nosūtītu pastu un pēc tam izsauktu funkciju galvenajā funkcijā.funcgalvenais() {
fmt. Drukāt (SendMail())
}
funcNosūtīt pastu()virkne {
// Pievienojiet kodu šeit
}
The Nosūtīt pastu() funkcija saturēs kodu, kas nosūta pastu adresātiem.
Kā darbojas e-pasta sūtīšana
SMTP protokols nosaka parametrus, kādiem ir jābūt katram pastam. Šie parametri ir sūtītāja un saņēmēja pasta adrese, ports, pa kuru tiek nosūtīts pasts, resursdatora serveris un ziņojums.
Iepriekš minētie parametri ir svarīgi e-pasta sūtīšanai.
Šajā apmācībā jūs uzzināsit, kā sūtīt Yahoo e-pastus. Tomēr process ir vienāds jebkuram pasta servera nodrošinātājam (MSP), ko izmantojat.
Tā kā jūs izmantojat Yahoo Mail, piesakieties savā Yahoo Mail kontu, dodieties uz Konta informācija, un noklikšķiniet uz Konta drošība cilne. Pēc tam ģenerējiet lietotnes paroli. Jums būs jāpiešķir lietotnei nosaukums, un pēc tam Yahoo Mail izveidos lietotnes paroli, un jūs varat izmantot paroli savā kodā kopā ar savu pasta adresi.
Iekš Nosūtīt pastu() funkciju, jūs deklarēsit trīs mainīgos; mainīgais, kurā ir jūsu e-pasta virkne, tas, kurā ir jūsu e-pasta parole, un virkne, kurā ir e-pasta adrese, uz kuru sūtāt ziņojumus.
no := "jū[email protected]"
parole := "aSecurePasswordHere"
uz := "[email protected]"
Var izmantot šķēli un cilpu caur elementiem ja plānojat tos nosūtīt vairākiem adresātiem.
E-pasta resursdatora un porta iegūšana un iestatīšana
SMTP protokols izmanto resursdatora un porta numurus, lai identificētu e-pasta avotu. Šeit parādās jūsu MSP. Jums jāzina resursdatora un porta numurs, ko MSP atļauj izmantot.
Pārbaudiet šo resursu, lai uzzinātu MSP resursdatoru sarakstu un portu numuri ja izmantojat publiskos e-pasta ziņojumus, piemēram, Gmail, Yahoo vai Outlook. Google pakalpojumam Gmail ir izslēdzis “mazāk drošas lietotnes”; Ja izmantojat pakalpojumu Gmail, iespējams, vēlēsities aizsargāt savu lietojumprogrammu.
Kad esat saņēmis porta numuru un resursdatora adresi, piešķiriet tos šādiem mainīgajiem:
saimniekdators := "smtp.mail.yahoo.com"
ports := "465"
Iepriekš minētie resursdatora un porta numuri ir no Yahoo Mail, lai tos varētu izmantot parastajos kontos. Serveris tiek mitināts vietnē smtp.mail.yahoo.com, un jums ir atļauts izmantot portu 465 lai nosūtītu e-pastus.
E-pasta satura deklarēšana
Nākamais solis ir pasta satura deklarēšana kā mainīgie. Priekšmets un ķermenis veido vēstījumu.
subjekts := "Ei, es tikai pārbaudu tevi."
body := "Ceru, ka tev iet labi! Kā tev klājas šodien. "
The priekšmets mainīgais ir e-pasta tēma; uz ķermenis mainīgais ir sūtāmā e-pasta ziņojuma pamatteksts.
E-pasta virsrakstu iestatīšana
Jums būs jāizveido virkņu karte, lai apzīmētu e-pasta vēstules galvenes.
galvenes := veidot(karte[virkne]virkne)
galvenes ["No"] = no
galvenes ["Kam"] = uz
headers ["Tēma"] = tēma
ziņa := ""
priekš k, v := diapazons galvenes {
ziņa += fmt. Sprintf("%s: %s\r", k, v)
}
ziņojums += "\r" + pamatteksts
Vispirms izveidojiet virkņu atslēgu un vērtību karti un iestatiet savas adreses, adresāta adreses un tēmas galvenes, kā parādīts iepriekš. Izmantojot diapazonu for-cilpa uz galvenes karte, a ziņa Tiek deklarēts, ka mainīgais satur galvenes un ziņojumu, izmantojot virknes formatējumu.
E-pasta autentifikācija
Lai pārbaudītu avotu, e-pastam ir nepieciešama autentifikācija. Smtp pakotne nodrošina e-pasta autentifikācijas funkcionalitāti, izmantojot PlainAuth. The PlainAuth metode ņem identitāti, sūtītāja e-pastu, paroli un resursdatoru kā parametrus un atgriež Auth objektu, ko izmantosit, lai nosūtītu e-pastu.
autentificēt := smtp. PlainAuth("", no, parole, saimniekdators)
Identitāte ir jūsu lietotājvārds, kuru var atstāt tukšu, kā redzams šajā gadījumā.
Savienojuma izveide e-pastam
Daži pasta pakalpojumu sniedzēji pieprasa nosūtīt e-pastu, izmantojot savienojumu. Šajā rakstā mēs izveidosim a TCP savienojums uz serveri ar TLS konfigurācijām.
tlsConfig := &tls. Config{
InsecureSkipVerify: taisnība,
Servera nosaukums: saimniekdators,
}
Iepriekš minētajā kodā jūs veicāt TLS konfigurāciju, atsaucoties uz Konfig strukturēt kur InsecureSkipVerify bija iestatīts uz taisnība, un servera nosaukums tika piešķirts saimnieks mainīgs.
Jums ir jāizveido TCP savienojums, izmantojot Zvanīt metode tls iepakojums. The ciparnīca metode ņem savienojuma veidu (TCP), šajā gadījumā servera adresi un TLS savienojuma konfigurācijas.
savienojums, kļūda := tls. Dial("tcp", serverAddress, tlsConfig) err != nulle {
žurnāls. Panika (kļūda)
}
Iepriekš minētajā kodā jūs izveidojāt TCP savienojumu un apstrādājāt kļūdas; jūs būsit izveidojis jaunu smtp pakotni, izmantojot Jaunsklients metode tīkls/smtp iepakojums. The Jaunsklients metode uzņem attiecīgi savienojumu un resursdatoru.
smtpClient, err := smtp. NewClient (savienojums, resursdators)
ja kļūda! = nulle {
žurnāls. Panika (kļūda)
}
Tagad, kad esat izveidojis smtp klienta instancē, jums ir jāiestata parametri smtpClient un apstrādā kļūdas.
ja err = smtpClient. Auth (autentificēt); kļūda! = nulle {
žurnāls. Panika (kļūda)
}
ja err = smtpClient. Pasts (no); kļūda! = nulle {
žurnāls. Panika (kļūda)
}
ja err = smtpClient. Rcpt (galvenes ["Kam"]); kļūda! = nulle {
žurnāls. Panika (kļūda)
}
Iepriekš minētajā piemērā jūs nodevāt autentifikācijas, sūtītāja adreses un adresāta adreses parametrus to attiecīgajām metodēm un apstrādājāt kļūdas.
Visbeidzot, jums ir jāraksta savienojuma instancē, un to var izdarīt, izveidojot rakstītāju, izmantojot Dati jūsu metode smtp klients piemēram.
rakstnieks, err := smtpClient. Dati()
ja kļūda! = nulle {
žurnāls. Panika (kļūda)
}
_, err = rakstnieks. Rakstīt ([]baits(ziņa))
ja kļūda! = nulle {
žurnāls. Panika (kļūda)
}
Pēc rakstītāja izveides jūs ierakstāt ziņojuma baitu daļu, izmantojot Rakstiet metode, kā norādīts iepriekš minētajā piemērā.
err = rakstnieks. Aizvērt ()
ja kļūda! = nulle {
žurnāls. Panika (kļūda)
}
err = smtpClient. Iziet ()
ja kļūda! = nulle {
atgriezties
}
atgriezties "Veiksmīgi, pasts nosūtīts!"
Aizveriet rakstītāju un aizveriet smtp klienta savienojuma gadījumu, izmantojot iepriekš minēto kodu. The Nosūtīt pastu() funkcija atgriež veiksmes ziņojumu, kā parādīts iepriekš.
Zvanot uz Nosūtīt pastu() funkcija galvenais funkciju, jums ir jāsaņem veiksmes ziņojums, kas reģistrēts jūsu konsolē, un e-pasta ziņojums tiks nosūtīts adresātam.
Tīkla paketē ir vairāk
Tīkla pakotnē ir daudz pakotņu ar tīklu saistītām funkcijām, un smtp pakotne ir tikai viena no tām. Varat arī izmantot TCP un HTTP pakotnes ar tīklu saistītai izstrādei.
Net/smtp pakotne var šķist nepārvarama, ja neesat aizmugursistēmas izstrādātājs. Ir daudzas citas alternatīvas, kā ātri nosūtīt e-pastus, izmantojot mazāk koda rindiņu. Varat apskatīt e-pasta mārketinga uzņēmumus, piemēram, SendGrid, Twilio un MailChimp, un biļetenu pakalpojumus, piemēram, Substack un Revue, kas ļauj bez stresa sūtīt e-pasta ziņojumus daudziem lietotājiem.