Možná budete často muset posílat e-maily na mnoho účtů pomocí programů pro ověřování a pro mnoho dalších účelů.
Protokol SMTP definuje standardy, které umožňují e-mailovou komunikaci mezi poštovními servery a agenty přenosu pošty, zatímco protokol IMAP je určen pro příjem e-mailů.
Go poskytuje funkce pro aktivity související s e-mailem definované RFC v balíčku net/smtp, který také obsahuje rozšíření 8BITMIME, AUTH a STARTTLS.
Kód použitý v tomto projektu je k dispozici v a Úložiště GitHub a je pro vás zdarma k použití pod licencí MIT.
Jak odesílat e-maily v Go pomocí balíčku Net/SMTP
Balíček net/smtp je součástí standardní knihovny Go, takže nemusíte instalovat žádný externí balíček. Před použitím stačí balíček importovat.
import (
"net/smtp"
"log"
"crypto/tls"
"fmt"
)
Budete také muset importovat log balíček pro protokolování chyb do konzole a krypto/tls balíček pro konfiguraci bezpečného připojení.
Jakmile naimportujete balíček net/smtp, měli byste napsat a Poslat mail() odešlete e-mail a poté zavolejte funkci v hlavní funkci.
funchlavní() {
fmt. Tisknout (SendMail())
}
funcPoslat mail()tětiva {
// Sem přidejte kód
}
The Poslat mail() funkce by obsahovala kód, který odesílá poštu příjemcům.
Jak funguje odesílání e-mailů
Protokol SMTP definuje parametry, které musí mít každá pošta. Těmito parametry jsou e-mailová adresa odesílatele a příjemce, port, na který se pošta odesílá, hostitelský server a zpráva.
Výše uvedené parametry jsou důležité pro odesílání emailů.
V tomto tutoriálu se naučíte odesílat e-maily Yahoo. Proces je však stejný pro jakéhokoli poskytovatele poštovního serveru (MSP), kterého používáte.
Protože používáte Yahoo Mail, přihlaste se do svého Yahoo Mail účet, jděte na Informace o účtu, a klikněte na Zabezpečení účtu tab. Poté vygenerujte heslo aplikace. Budete muset aplikaci pojmenovat a poté Yahoo Mail vytvoří heslo pro aplikaci a heslo můžete použít ve svém kódu spolu se svou e-mailovou adresou.
V Poslat mail() funkce, deklarujete tři proměnné; proměnná, která obsahuje řetězec vašeho e-mailu, proměnná, která obsahuje vaše e-mailové heslo, a řetězec, který obsahuje e-mailovou adresu, na kterou posíláte zprávy.
from := "[email protected]"
heslo := "aSecurePasswordHere"
to := "[email protected]"
Můžete použít plátek a procházet prvky pokud je zamýšlíte odeslat více příjemcům.
Získání a nastavení hostitele e-mailu a portu
Protokol SMTP používá k identifikaci zdroje e-mailu čísla hostitele a portu. Zde přichází na řadu vaše MSP. Potřebujete znát hostitele a číslo portu, které vaše MSP umožňuje používat.
V tomto zdroji naleznete seznam hostitelů MSP a čísla portů pokud používáte veřejné e-maily, jako je Gmail, Yahoo nebo Outlook. Google vypnul „méně bezpečné aplikace“ pro Gmail; možná budete chtít zabezpečit svou aplikaci, pokud používáte Gmail.
Jakmile získáte číslo portu a adresu hostitele, přiřaďte je proměnným, jako je tato:
hostitel := "smtp.mail.yahoo.com"
port :="465"
Výše uvedená čísla hostitelů a portů pocházejí z Yahoo Mail pro použití na běžných účtech. Server je hostován na adrese smtp.mail.yahoo.com a máte povoleno používat port 465 k odesílání e-mailů.
Prohlášení obsahu e-mailu
Dalším krokem je deklarovat obsah pošty jako proměnné. Předmět a tělo tvoří zprávu.
předmět := "Ahoj, právě tě hlídám."
body := "Doufám, že se máš dobře! Jak se dnes máš. "
The předmět proměnná je předmětem e-mailu; a tělo proměnná je tělo e-mailu, který odesíláte.
Nastavení záhlaví e-mailů
Budete muset vytvořit mapu řetězců pro označení záhlaví e-mailu.
hlavičky := udělat(mapa[tětiva]tětiva)
záhlaví["Od"] = od
záhlaví["To"] = komu
hlavičky["Předmět"] = předmět
zpráva := ""
pro k, v:= rozsah záhlaví {
zpráva += fmt. Sprintf("%s: %s\r", k, v)
}
zpráva += "\r" + tělo
Nejprve vytvoříte mapu řetězcových klíčů a hodnot a nastavíte záhlaví vaší adresy, adresu příjemce a předmět, jak je uvedeno výše. Použití rozsahu for-loop na hlavičky mapa, a zpráva proměnná je deklarována tak, že obsahuje záhlaví a zprávu pomocí formátování řetězce.
Ověřování e-mailu
E-mail vyžaduje ověření k ověření zdroje. Balíček smtp poskytuje funkce pro ověřování e-mailů pomocí PlainAuth. The PlainAuth metoda bere jako parametry identitu, e-mail odesílatele, heslo a hostitele a vrací Auth objekt, který použijete k odeslání e-mailu.
autentizovat := smtp. PlainAuth("", od, heslo, hostitel)
Identita je vaše uživatelské jméno, které může zůstat prázdné, jak je vidět v tomto případě.
Vytvoření připojení pro e-mail
Někteří poskytovatelé poštovních služeb vyžadují, abyste e-mail odeslali prostřednictvím připojení. V tomto článku uděláme a TCP spojení na server s konfiguracemi TLS.
tlsConfig := &tls. Konfigurace{
InsecureSkipVerify: skutečný,
ServerName: hostitel,
}
Ve výše uvedeném kódu jste provedli konfiguraci TLS odkazem na Konfigurace struct kde InsecureSkipVerify byla nastavena na skutečnýa název serveru byl přiřazen k hostitel variabilní.
Musíte vytvořit připojení TCP pomocí Vytáčení metoda tls balík. The číselník metoda přebírá typ připojení (TCP), v tomto případě adresu serveru a konfiguraci připojení TLS.
připojení, chyba := tls. Dial("tcp", serverAddress, tlsConfig) err != nula {
log. panika (chyba)
}
Ve výše uvedeném kódu jste vytvořili připojení TCP a zpracovali chyby; vytvoříte instanci nového balíčku smtp pomocí Nový klient metoda net/smtp balík. The Nový klient metoda přijímá připojení a hostitele.
smtpClient, err := smtp. Nový klient (připojení, hostitel)
-li chyba!= nula {
log. panika (chyba)
}
Nyní, když jste vytvořili smtp instance klienta, musíte nastavit parametry smtpClient a řešit chyby.
-li err = smtpClient. Auth (ověření); chyba!= nula {
log. panika (chyba)
}
-li err = smtpClient. Pošta (od); chyba!= nula {
log. panika (chyba)
}
-li err = smtpClient. Rcpt (hlavičky["To"]); chyba!= nula {
log. panika (chyba)
}
Ve výše uvedeném příkladu jste předali parametry ověřování, adresy odesílatele a adresy příjemce jejich příslušným metodám a řešili chyby.
Nakonec musíte zapsat do instance připojení a můžete to udělat vytvořením zapisovače pomocí Data vaší metodou smtp klient instance.
spisovatel, chyba := smtpClient. Data()
-li chyba!= nula {
log. panika (chyba)
}
_, err = spisovatel. Napsat([]byte(zpráva))
-li chyba!= nula {
log. panika (chyba)
}
Po vytvoření zapisovače zapíšete bajtový řez zprávy pomocí Napsat způsobem jako ve výše uvedeném příkladu.
chybovat = spisovatel. Zavřít()
-li chyba!= nula {
log. panika (chyba)
}
err = smtpClient. Přestat()
-li chyba!= nula {
vrátit se
}
vrátit se "Úspěšně, pošta byla odeslána!"
Zavřete zapisovač a ukončete instanci připojení klienta smtp pomocí výše uvedeného kódu. The Poslat mail() funkce vrátí zprávu o úspěchu, jak je uvedeno výše.
Při volání na Poslat mail() funkce v hlavní měli byste dostat zprávu o úspěchu zaprotokolovanou do vaší konzole a e-mail odeslat příjemci.
Síťový balíček obsahuje více
Balíček net obsahuje mnoho balíčků pro síťové funkce a balíček smtp je jen jedním z nich. Můžete také použít balíčky TCP a HTTP pro vývoj související se sítí.
Pokud nejste backendový vývojář, může se vám zdát, že balíček net/smtp je ohromující. Existuje mnoho dalších alternativ pro rychlé odesílání e-mailů s menším počtem řádků kódu. Můžete se podívat na e-mailové marketingové společnosti jako SendGrid, Twilio a MailChimp a služby newsletterů jako Substack a Revue, které vám umožňují bez stresu posílat e-maily mnoha uživatelům.