Možno budete často musieť posielať e-maily na mnohé účty pomocou programov na overenie a na mnohé iné účely.
Protokol SMTP definuje štandardy, ktoré umožňujú e-mailovú komunikáciu medzi poštovými servermi a agentmi prenosu pošty, zatiaľ čo protokol IMAP slúži na prijímanie e-mailov.
Go poskytuje funkcie pre aktivity súvisiace s e-mailom definované RFC v balíku net/smtp, ktorý tiež obsahuje rozšírenia 8BITMIME, AUTH a STARTTLS.
Kód použitý v tomto projekte je dostupný v a Úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.
Ako odosielať e-maily v Go pomocou balíka Net/SMTP
Balík net/smtp je súčasťou štandardnej knižnice Go, takže nemusíte inštalovať žiadny externý balík. Pred použitím musíte balík iba importovať.
importovať (
"net/smtp"
"log"
"crypto/tls"
"fmt"
)
Budete tiež musieť importovať log balík na zaznamenávanie chýb do konzoly a krypto/tls balík na konfiguráciu bezpečného pripojenia.
Po importovaní balíka net/smtp by ste mali napísať a Poslať mail() odoslanie pošty a potom zavolajte funkciu v hlavnej funkcii.
funchlavné() {
fmt. Tlačiť (SendMail())
}
funcPoslať mail()reťazec {
// Sem pridajte kód
}
The Poslať mail() funkcia by obsahovala kód, ktorý odosiela poštu príjemcom.
Ako funguje odosielanie e-mailov
Protokol SMTP definuje parametre, ktoré musí mať každá pošta. Týmito parametrami sú poštová adresa odosielateľa a príjemcu, port, na ktorý sa pošta odosiela, hostiteľský server a správa.
Vyššie uvedené parametre sú dôležité pre odosielanie emailov.
V tomto návode sa naučíte posielať Yahoo e-maily. Proces je však rovnaký pre akéhokoľvek poskytovateľa poštového servera (MSP), ktorého používate.
Keďže používate Yahoo Mail, prihláste sa do svojho Yahoo Mail účet, choďte na Informácie o účte, a kliknite na Zabezpečenie účtu tab. Potom vygenerujte heslo aplikácie. Aplikáciu budete musieť pomenovať a potom Yahoo Mail vytvorí heslo pre aplikáciu a heslo môžete použiť vo svojom kóde spolu so svojou e-mailovou adresou.
V Poslať mail() funkcie, deklarujete tri premenné; premenná, ktorá obsahuje reťazec vášho e-mailu, premenná, ktorá obsahuje vaše e-mailové heslo, a reťazec, ktorý obsahuje e-mailovú adresu, na ktorú posielate správy.
from := "[email protected]"
heslo := "aSecurePasswordHere"
komu:= "[email protected]"
Môžete použiť plátok a slučka cez prvky ak ich chcete poslať viacerým príjemcom.
Získanie a nastavenie hostiteľa e-mailu a portu
Protokol SMTP používa na identifikáciu zdroja e-mailu čísla hostiteľa a portu. Tu prichádza na scénu vaša MSP. Musíte poznať hostiteľa a číslo portu, ktoré vám váš MSP umožňuje používať.
V tomto zdroji nájdete zoznam hostiteľov MSP a čísla portov ak používate verejné e-maily ako Gmail, Yahoo alebo Outlook. Google vypol „menej bezpečné aplikácie“ pre Gmail; možno budete chcieť zabezpečiť svoju aplikáciu, ak používate Gmail.
Keď získate číslo portu a adresu hostiteľa, priraďte ich k premenným, ako je tento:
hostiteľ := "smtp.mail.yahoo.com"
port :="465"
Vyššie uvedené čísla hostiteľa a portov pochádzajú z Yahoo Mail na použitie na bežných účtoch. Server je hosťovaný na adrese smtp.mail.yahoo.com a máte povolené používať port 465 na odosielanie e-mailov.
Vyhlásenie obsahu e-mailu
Ďalším krokom je deklarovať obsah pošty ako premenné. Predmet a telo tvoria správu.
predmet := "Hej, práve ťa kontrolujem."
body := "Dúfam, že sa máš dobre! Ako sa dnes máš. "
The predmet premenná je predmetom emailu; a telo premenná je telo e-mailu, ktorý odosielate.
Nastavenie hlavičiek e-mailov
Budete musieť vytvoriť mapu reťazcov na označenie hlavičiek e-mailu.
hlavičky := urobiť(mapa[reťazec]reťazec)
hlavičky["Od"] = od
hlavičky["To"] = komu
hlavičky["Predmet"] = predmet
správa := ""
pre k, v:= rozsah hlavičky {
správa += fmt. Sprintf("%s: %s\r", k, v)
}
správa += "\r" + telo
Najprv vytvoríte mapu reťazcových kľúčov a hodnôt a nastavíte hlavičky svojej adresy, adresy príjemcu a predmetu, ako je uvedené vyššie. Použitie rozsahu for-loop na hlavičky mapa, a správu premenná je deklarovaná tak, že obsahuje hlavičky a správu pomocou formátovania reťazca.
Overenie e-mailu
E-mail potrebuje overenie na overenie zdroja. Balík smtp poskytuje funkcie na autentifikáciu e-mailov pomocou PlainAuth. The PlainAuth metóda berie ako parametre identitu, e-mail odosielateľa, heslo a hostiteľa a vracia an Auth objekt, ktorý použijete na odoslanie e-mailu.
autentifikovať := smtp. PlainAuth("", od, heslo, hostiteľ)
Identita je vaše používateľské meno, ktoré môže zostať prázdne, ako je vidieť v tomto prípade.
Vytvorenie pripojenia pre e-mail
Niektorí poskytovatelia poštových služieb vyžadujú, aby ste e-mail odoslali cez pripojenie. V tomto článku urobíme a TCP spojenie na server s konfiguráciou TLS.
tlsConfig := &tls. Config{
InsecureSkipVerify: pravda,
ServerName: hostiteľ,
}
Vo vyššie uvedenom kóde ste vytvorili konfiguráciu TLS odkazom na Konfig struct kde InsecureSkipVerify bol nastavený na pravdaa názov servera bol priradený k hostiteľ premenlivý.
Musíte vytvoriť pripojenie TCP pomocou Vytočiť metóda tls balík. The vytočiť metóda preberá typ pripojenia (TCP), v tomto prípade adresu servera a konfigurácie pripojenia TLS.
pripojenie, chyba := tls. Dial("tcp", serverAddress, tlsConfig) err != nula {
log. panika (chyba)
}
Vo vyššie uvedenom kóde ste vytvorili pripojenie TCP a vyriešili chyby; vytvoríte inštanciu nového balíka smtp pomocou Nový klient metóda net/smtp balík. The Nový klient metóda prijíma pripojenie a hostiteľa.
smtpClient, chyba := smtp. NewClient (spojenie, hostiteľ)
ak chyba!= nula {
log. panika (chyba)
}
Teraz, keď ste vytvorili smtp klientskej inštancie, musíte nastaviť parametre smtpClient a zvládnuť chyby.
ak err = smtpClient. Auth (overiť); chyba!= nula {
log. panika (chyba)
}
ak err = smtpClient. Pošta (od); chyba!= nula {
log. panika (chyba)
}
ak err = smtpClient. Rcpt (hlavičky["To"]); chyba!= nula {
log. panika (chyba)
}
Vo vyššie uvedenom príklade ste odovzdali parametre autentifikácie, adresy odosielateľa a adresy príjemcu ich príslušným metódam a riešili chyby.
Nakoniec musíte zapísať do inštancie pripojenia a môžete to urobiť vytvorením zapisovača pomocou Údaje tvoja metóda smtp klient príklad.
spisovateľ, chyba := smtpClient. údaje ()
ak chyba!= nula {
log. panika (chyba)
}
_, chyba = spisovateľ. Napíšte ([]byte(správa))
ak chyba!= nula {
log. panika (chyba)
}
Po vytvorení zapisovača napíšete bajtovú časť správy pomocou Napíšte metóda ako v príklade vyššie.
chyba = spisovateľ. Zavrieť()
ak chyba!= nula {
log. panika (chyba)
}
err = smtpClient. Ukončiť()
ak chyba!= nula {
vrátiť
}
vrátiť "Úspešne, pošta bola odoslaná!"
Zatvorte zapisovač a ukončite inštanciu pripojenia klienta smtp pomocou vyššie uvedeného kódu. The Poslať mail() funkcia vráti správu o úspechu, ako je uvedené vyššie.
Pri volaní na Poslať mail() funkciu v hlavné mali by ste dostať správu o úspechu zaznamenanú do vašej konzoly a e-mail odoslaný vášmu príjemcovi.
Čistý balík obsahuje viac
Sieťový balík obsahuje veľa balíkov pre sieťové funkcie a balík smtp je len jedným z nich. Balíky TCP a HTTP môžete použiť aj na vývoj súvisiaci so sieťou.
Ak nie ste backendový vývojár, môže sa vám zdať balík net/smtp ohromujúci. Existuje mnoho ďalších alternatív rýchleho odosielania e-mailov s menším počtom riadkov kódu. Môžete si pozrieť e-mailové marketingové spoločnosti ako SendGrid, Twilio a MailChimp a služby bulletinov ako Substack a Revue, ktoré vám umožňujú posielať e-maily mnohým používateľom bez stresu.