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.