Golang Wyślij e -mail

Golang Wyślij e -mail
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.