Protokół SMTP jest jednym z elementów składowych nowoczesnego Internetu. Protokół działa jako standard dla transmisji e-mailowych. Zawiera serwer pocztowy i klient pocztowy, aby ułatwić przesyłanie wiadomości e -mail.
W tym przewodniku omówimy, w jaki sposób możesz wysyłać e -maile za pomocą pakietu SMTP w Go. Do testowania użyjemy lokalnie hostowanego serwera SMTP za pomocą MailSrUrper.
Golang SMTP
Pakiet SMTP to pod-pakiet pakietu netto Golang. Wdraża funkcjonalność wysokiego poziomu do pracy z protokołem SMTP.
Nauczmy się wysyłać e -mail za pomocą pakietu SMTP.
Pakiet SMTP zawiera metodę sendmail (), która umożliwia wysłanie wiadomości e -mail na określony adres.
Składnia funkcji jest jak pokazana:
Func sendmail (String Addr, Auth, od ciągu, do [] string, msg [] bajt) błąd
Funkcja akceptuje adres serwera SMTP jako ciąg, mechanizm uwierzytelniania, adres e -mail do wysłania, adres e -mail do wysłania, oraz wiadomość e -mail jako parametry.
Wiadomość e -mail powinna rozpocząć się od nagłówka, pustej linii i ciała e -mail. Powinieneś zakończyć każdy wiersz wiadomości znakami CRLF, umożliwiając zgodność z stylem e -mail RFC 822.
Poniższy kod pokazuje prosty przykład korzystania z funkcji sendmail do wysyłania wiadomości e -mail.
Pakiet Main
import (
„FMT”
"dziennik"
„Net/SMTP”
)
const (
Nazwa użytkownika = "Linuxhint"
Passwd = "hasło"
Host = "localhost"
)
func main ()
od: = "
[email protected] "
do: = [] ciąg
„
[email protected] ",
msg: = [] bajte ("from:
[email protected] \ r \ n ” +
"Do:
[email protected] " +
„Temat: Golang Testing Mail \ r \ n” +
„Ciało e -mail: Witamy, żeby iść!\ r \ n ”)
AUTH: = SMTP.PlainAuth („”, nazwa użytkownika, Passwd, gospodarz)
err: = SMTP.Sendmail (host+": 25", auth, od, do, msg)
Jeśli err != zero
dziennik.Fatalny (err)
fmt.Println („poczta wysłana pomyślnie!")
W powyższym przykładzie zaczynamy od zaimportowania wymaganych pakietów. Następnie określamy wymagane zmienne. W naszym przykładzie ustawiamy nazwę użytkownika, hasło i host.
W głównej funkcji ustawiamy nadawcę e -maila i odbiornika odpowiednio za pomocą zmiennych z i do zmiennych.
Następnie nadchodzi ciało e -mail, używamy stylu RFC 822 do skonstruowania wiadomości. Zauważ, że każda linia jest oddzielona znakami CRLF.
Następnie budujemy uwierzytelnianie za pomocą metody PlainAuth. Funkcja przyjmuje tożsamość, nazwę użytkownika, hasło i host i przekłada mechanizm zwykłego uwierzytelniania z serwerem. Następnie funkcja powraca do obiektu Auth.
Wreszcie wysyłamy wiadomość e -mail za pomocą funkcji sendmail, która przechodzą adres, obiekt autorytacyjny, nadawca, odbiorca i wiadomość jako argumenty.
Metoda autoryzacji pocztowej
Jeśli uruchomisz powyższy kod na poczcie, serwer zwróci błąd jak poniżej i zamknie połączenie.
$ Go Uruchom e -maile.Iść
2022/02/02 02:52:39 SMTP: Serwer nie obsługuje autoryzacji
Status wyjścia 1
Możesz to rozwiązać za pomocą niestandardowej funkcji sendmail. Przykładowy kod jest pokazany poniżej:
Pakiet Main
import (
„kodowanie/base64”
„FMT”
"dziennik"
„Net/SMTP”
"smyczki"
)
const (
Nazwa użytkownika = "Linuxhint"
Passwd = "hasło"
Host = "localhost"
)
func main ()
od: = "
[email protected] "
do: = [] ciąg
„
[email protected] ",
MSG: = [] bajt ("Ciało e -mail: Witamy!\ r \ n ”)
err: = sendmail (host+": 2500", z „e -mail testowania golang”, ciąg (msg), to)
Jeśli err != zero
dziennik.Fatalny (err)
fmt.Println („poczta wysłana pomyślnie!")
Func sendmail (addr, from, podmiot, ciąg nadwozia, do [] ciąg) błąd
R: = Strings.NEWREPLACER („\ r \ n”, „”, „\ r”, „”, „\ n”, „”, „%0a”, „”, „%0d”, „”)
c, err: = SMTP.Wybór (Addr)
Jeśli err != zero
powrót błędu
odroczenie c.Zamknąć()
Jeśli err = c.Poczta (r.Zamień (z)); błądzić != zero
powrót błędu
Dla i: = zakres do
do [i] = r.Wymień (do [i])
Jeśli err = c.Rcpt (do [i]); błądzić != zero
powrót błędu
w, err: = c.Dane()
Jeśli err != zero
powrót błędu
msg: = "to:" + ciągi.Dołącz (to, ",") + "\ r \ n" +
„From:” + z + „\ r \ n” +
„Temat:” + Temat + „\ r \ n” +
„Content-Type: Text/html; Charset =" utf-8 "\ r \ n" +
„Contransfer-incoding: base64 \ r \ n” +
„\ r \ n” + base64.Stdencoding.Enkodetostring ([] bajt (ciało))
_, err = w.Write ([] bajt (msg))
Jeśli err != zero
powrót błędu
err = w.Zamknąć()
Jeśli err != zero
powrót błędu
zwrot c.Zrezygnować()
Golang Send Mail - Kopia Carbon
Możesz także wysłać e -maile do wielu użytkowników za pomocą kopii węgla i kopiowania ślepego węgla. Odbiorcy CC będą widoczni dla wszystkich.
Możemy to zrobić za pomocą kodu jak poniżej:
Pakiet Main
import (
„FMT”
"dziennik"
„Net/SMTP”
"smyczki"
)
Wpisz pocztę strukturę
Ciąg nadawcy
Do [] ciąg
CC [] ciąg
BCC [] String
Ciągły ciąg
String ciała
func main ()
Sender: = "
[email protected]"
do: = [] ciąg
"Hello@przykład.com ",
"
[email protected] ",
"Wię
[email protected]",
CC: = [] String
"
[email protected] ",
„Kolejny
[email protected] ",
Nazwa użytkownika: = "Linuxhint"
passwd: = "hasło"
host: = „LocalHost”
Temat: = „Golang Mail Test”
Body: = "Ciało wiadomości"
req: = poczta
Nadawca: nadawca,
Do: do,
CC: CC,
Temat: Temat,
Ciało: ciało,
MSG: = COMPOSEMSG (req)
AUTH: = SMTP.PlainAuth („”, nazwa użytkownika, Passwd, gospodarz)
err: = SMTP.Sendmail (host+": 2500", auth, nadawca, do, [] bajt (msg))
Jeśli err != zero
dziennik.Fatalny (err)
fmt.Println („Wiadomość wysłana pomyślnie!")
// Skonstruuj wiadomość na podstawie CC
FUNC COMPOSEMSG (poczta poczta) String
// pusta struna
MSG: = ""
// Ustaw nadawca
MSG += fmt.Sprintf („From: %s \ r \ n”, poczta.Nadawca)
// jeśli więcej niż 1 odbiorca
Jeśli Len (poczta.To)> 0
MSG += fmt.Sprintf („cc: %s \ r \ n”, struny.Dołącz (poczta.Cc, ";"))
// Dodaj temat
MSG += fmt.Sprintf („Temat: %s \ r \ n”, poczta.Temat)
// Dodaj korpus pocztowy
MSG += fmt.Sprintf („Body: %s \ r \ n”, poczta.Ciało)
Zwrot MSG
Powyższy kod wyśle e -maile do określonych odbiorców za pomocą protokołu SMTP.
Zamknięcie
W tym przewodniku badaliśmy podstawy korzystania z pakietu SMTP w Go, aby wysłać e -maile do jednego lub więcej użytkowników. Sprawdź dokumentację, aby dowiedzieć się więcej.