Często może być konieczne wysyłanie wiadomości e-mail na wiele kont za pomocą programów do uwierzytelniania i wielu innych celów.

Protokół SMTP definiuje standardy, które umożliwiają komunikację e-mail między serwerami pocztowymi i agentami przesyłania poczty, podczas gdy protokół IMAP służy do odbierania wiadomości e-mail.

Go zapewnia funkcjonalność dla działań związanych z pocztą e-mail zdefiniowanych przez RFC w pakiecie net/smtp, który zawiera również rozszerzenia 8BITMIME, AUTH i STARTTLS.

Kod użyty w tym projekcie jest dostępny w Repozytorium GitHub i jest darmowy do użytku na licencji MIT.

Jak wysyłać e-maile w Go za pomocą pakietu Net/SMTP?

Pakiet net/smtp jest częścią standardowej biblioteki Go, więc nie musisz instalować żadnego zewnętrznego pakietu. Musisz tylko zaimportować pakiet przed jego użyciem.

import (
„sieć/smtp”
"dziennik"
„krypto/tls”
„fmt”
)

Będziesz także musiał zaimportować dziennik pakiet do logowania błędów do konsoli i krypto/tls pakiet do skonfigurowania bezpiecznego połączenia.

instagram viewer

Po zaimportowaniu pakietu net/smtp powinieneś napisać Wyślij maila() funkcji, aby wysłać pocztę, a następnie wywołać funkcję w funkcji main.

funkcjonowaćGłówny() {
fmt. Drukuj (SendMail())
}
funkcjonowaćWyślij maila()strunowy {
// Dodaj kod tutaj
}

The Wyślij maila() funkcja zawierałaby kod, który wysyła pocztę do odbiorców.

Jak działa wysyłanie e-maili

Protokół SMTP definiuje parametry, które musi mieć każda poczta. Te parametry to adresy e-mail nadawcy i odbiorcy, port, na którym wysyłana jest poczta, serwer hosta i wiadomość.

Podane powyżej parametry są ważne przy wysyłaniu wiadomości e-mail.

W tym samouczku nauczysz się wysyłać e-maile Yahoo. Jednak proces jest taki sam dla dowolnego używanego dostawcy serwera poczty (MSP).

Ponieważ korzystasz z poczty Yahoo, zaloguj się do swojego poczta Yahoo konto, przejdź do Informacje o koncie, i kliknij Ochrona Konta patka. Następnie wygeneruj hasło do aplikacji. Musisz nazwać aplikację, a następnie Yahoo Mail utworzy hasło do aplikacji i możesz użyć hasła w kodzie wraz z adresem e-mail.

w Wyślij maila() funkcji, zadeklarujesz trzy zmienne; zmienna przechowująca ciąg wiadomości e-mail, zmienna przechowująca hasło do wiadomości e-mail oraz ciąg przechowujący adres e-mail, na który wysyłasz wiadomości.

od := "twoja [email protected]"
hasło := "aSecurePasswordHere"
do := "[email protected]"

Możesz użyć plasterka i pętla przez elementy jeśli zamierzasz wysłać je do wielu odbiorców.

Pobieranie i ustawianie hosta i portu poczty e-mail

Protokół SMTP używa numerów hosta i portu do identyfikacji źródła wiadomości e-mail. Tutaj wkracza Twój MSP. Musisz znać hosta i numer portu, z którego może korzystać Twój MSP.

Sprawdź ten zasób, aby uzyskać listę hostów MSP i numery portów jeśli używasz publicznych e-maili, takich jak Gmail, Yahoo lub Outlook. Google wyłączył „mniej bezpieczne aplikacje” dla Gmaila; możesz chcieć zabezpieczyć swoją aplikację, jeśli korzystasz z Gmaila.

Po uzyskaniu numeru portu i adresu hosta przypisz je do zmiennych w następujący sposób:

host := "smtp.mail.yahoo.com"
port := "465"

Powyższe numery hosta i portu pochodzą z poczty Yahoo do użytku na zwykłych kontach. Serwer jest hostowany pod adresem smtp.mail.yahoo.com i możesz korzystać z portu 465 wysyłać e-maile.

Deklaracja treści wiadomości e-mail

Następnym krokiem jest zadeklarowanie zawartości poczty jako zmiennych. Temat i treść wiadomości składają się na wiadomość.

subject := "Hej, tylko Cię sprawdzam."
body := "Mam nadzieję, że wszystko w porządku! Jak się masz dzisiaj. "

The Przedmiot zmienna jest tematem e-maila; ten ciało zmienna to treść wysyłanego e-maila.

Ustawianie nagłówków wiadomości e-mail

Musisz stworzyć mapę ciągów, aby oznaczyć nagłówki wiadomości e-mail.

nagłówki := robić(mapa[strunowy]strunowy)
nagłówki["Od"] = od
nagłówki["Do"] = do
nagłówki["Temat"] = temat
wiadomość := ""
dla k, v := zasięg nagłówki {
wiadomość += fmt. Sprintf("%s: %s\r", k, v)
}
wiadomość += "\r" + treść

Najpierw tworzysz mapę ciągów znaków i wartości oraz ustawiasz nagłówki swojego adresu, adres odbiorcy i temat, jak pokazano powyżej. Korzystanie z zakresu pętli for na nagłówki mapa, a wiadomość zmienna jest zadeklarowana jako zawierająca nagłówki i komunikat przy użyciu formatowania ciągu.

Uwierzytelnianie wiadomości e-mail

Wiadomość e-mail wymaga uwierzytelnienia, aby zweryfikować źródło. Pakiet smtp zapewnia funkcjonalność uwierzytelniania poczty e-mail za pomocą Zwykły Uwierz. The Zwykłe uwierzytelnianie Metoda przyjmuje tożsamość, adres e-mail nadawcy, hasło i hosta jako parametry i zwraca Uwierzytelnianie obiekt, którego użyjesz do wysłania wiadomości e-mail.

uwierzytelnij := SMTP. PlainAuth("", z, hasło, host)

Tożsamość to Twoja nazwa użytkownika, którą można pozostawić pustą, jak widać w tym przypadku.

Tworzenie połączenia dla e-maila

Niektórzy dostawcy usług pocztowych wymagają wysłania wiadomości e-mail za pośrednictwem połączenia. W tym artykule zrobimy a Połączenie TCP do serwera z konfiguracjami TLS.

tlsConfig := &tls. Konfiguracja{
Niepewne PomińWeryfikuj: PRAWDA,
NazwaSerwera: host,
}

W powyższym kodzie dokonałeś konfiguracji TLS, odwołując się do Konfiguracja struktura gdzie Niepewny PomińZweryfikuj był ustawiony na PRAWDA, a nazwa serwera została przypisana do gospodarz zmienny.

Musisz utworzyć połączenie TCP za pomocą Wybierz metoda tls pakiet. The Wybierz Metoda przyjmuje typ połączenia (TCP), w tym przypadku adres serwera oraz konfiguracje połączenia TLS.


połączenie, błąd := tls. Dial("tcp", serverAddress, tlsConfig) err != zero {
dziennik. Panika (błąd)
}

W powyższym kodzie wykonałeś połączenie TCP i obsłużyłeś błędy; utworzysz instancję nowego pakietu smtp za pomocą Nowy klient metoda sieć/smtp pakiet. The Nowy klient Metoda przyjmuje odpowiednio połączenie i hosta.

smtpClient, błąd := smtp. Nowy Klient (połączenie, host)
jeśli błąd != zero {
dziennik. Panika (błąd)
}

Teraz, gdy stworzyłeś smtp instancja klienta, musisz ustawić parametry smtpClient i obsługi błędów.

jeśli błąd = smtpClient. Uwierzytelnianie (uwierzytelnianie); błąd != zero {
dziennik. Panika (błąd)
}
jeśli błąd = smtpClient. Mail od); błąd != zero {
dziennik. Panika (błąd)
}
jeśli błąd = smtpClient. Rcpt (nagłówki["Do"]); błąd != zero {
dziennik. Panika (błąd)
}

W powyższym przykładzie przekazano parametry uwierzytelniania, adres nadawcy i adres odbiorcy do odpowiednich metod i obsłużonych błędów.

Na koniec musisz napisać do instancji połączenia i możesz to zrobić, tworząc pisarza za pomocą Dane metoda twojego klient SMTP instancja.

pisarz, błąd := smtpClient. Dane()
jeśli błąd != zero {
dziennik. Panika (błąd)
}
_, błąd = pisarz. Pisać([]bajt(wiadomość))
jeśli błąd != zero {
dziennik. Panika (błąd)
}

Po utworzeniu programu piszącego piszesz fragment wiadomości za pomocą Pisać sposób jak w powyższym przykładzie.

błąd = pisarz. Blisko()
jeśli błąd != zero {
dziennik. Panika (błąd)
}
błąd = smtpClient. Zrezygnować()
jeśli błąd != zero {
zwrócić
}
zwrócić "Pomyślnie, poczta została wysłana!"

Zamknij program zapisujący i zamknij wystąpienie połączenia klienta SMTP przy użyciu powyższego kodu. The Wyślij maila() funkcja zwraca komunikat o powodzeniu, jak pokazano powyżej.

Dzwoniąc do Wyślij maila() funkcja w Główny funkcja, powinieneś otrzymać wiadomość o sukcesie zalogowaną do konsoli, a wiadomość e-mail wysłana do odbiorcy.

W pakiecie netto jest więcej

Pakiet net zawiera wiele pakietów związanych z funkcjami sieciowymi, a pakiet smtp jest tylko jednym z nich. Możesz także użyć pakietów TCP i HTTP do programowania związanego z siecią.

Pakiet net/smtp może wydawać się przytłaczający, jeśli nie jesteś programistą zaplecza. Istnieje wiele innych alternatyw dla szybkiego wysyłania wiadomości e-mail z mniejszą liczbą wierszy kodu. Możesz sprawdzić firmy zajmujące się marketingiem e-mailowym, takie jak SendGrid, Twilio i MailChimp, oraz usługi biuletynów, takie jak Substack i Revue, które umożliwiają bezstresowe wysyłanie wiadomości e-mail do wielu użytkowników.