Il protocollo SMTP è uno dei mattoni di Internet moderno. Il protocollo funge da standard per le trasmissioni e-mail. Comprende un server di posta e un client di posta per facilitare il trasferimento di e -mail.
In questa guida, discuteremo di come inviare e -mail utilizzando il pacchetto SMTP in GO. Per i test, utilizzeremo un server SMTP ospitato localmente utilizzando MailSlUrper.
Golang Smtp
Il pacchetto SMTP è un sotto-pacchetto del pacchetto net Golang. Implementa funzionalità di alto livello per lavorare con il protocollo SMTP.
Impariamo come inviare e -mail utilizzando il pacchetto SMTP.
Il pacchetto SMTP fornisce un metodo SendMail () che consente di inviare e -mail all'indirizzo specificato.
La sintassi della funzione è come mostrata:
func sendmail (stringa addr, un'auth, dalla stringa, a [] stringa, msg [] byte) Errore
La funzione accetta l'indirizzo del server SMTP come stringa, un meccanismo di autenticazione, indirizzo e -mail da cui inviare, l'indirizzo e -mail da inviare e il messaggio di posta elettronica come parametri.
Il messaggio e -mail dovrebbe iniziare con l'intestazione, una riga vuota e il corpo e -mail. Dovresti terminare ogni riga del messaggio con caratteri CRLF, consentendo la conformità con lo stile e -mail RFC 822.
Il seguente codice mostra un semplice esempio di utilizzo della funzione Sendmail per inviare un'e -mail.
Pacchetto principale
importazione (
"FMT"
"tronco d'albero"
"Net/SMTP"
)
const (
Username = "LinuxHint"
Passwd = "password"
Host = "localhost"
)
func main ()
da: = "
[email protected] "
a: = [] string
"
[email protected] ",
msg: = [] byte ("da:
[email protected] \ r \ n " +
"A:
[email protected] " +
"Oggetto: Golang Testing Mail \ r \ n" +
"Email Body: Welcome to Go!\ r \ n ")
AUTH: = SMTP.Plauauth ("", nome utente, passwd, host)
err: = SMTP.Sendmail (host+": 25", autenticazione da, a, msg)
Se err != nil
tronco d'albero.Fatale (err)
fmt.Println ("Mail inviato correttamente!")
Nell'esempio sopra, iniziamo importando i pacchetti richiesti. Quindi specifichiamo le variabili richieste. Nel nostro esempio, impostiamo il nome utente, la password e l'host.
Nella funzione principale, impostiamo il mittente dell'e -mail e il ricevitore utilizzando rispettivamente le variabili.
Successivamente arriva il corpo e -mail, utilizziamo lo stile RFC 822 per costruire il messaggio. Si noti che ogni riga è separata con caratteri CRLF.
Successivamente, costruiamo l'autenticazione usando il metodo Plauauth. La funzione prende l'identità, il nome utente, la password e l'host e gli ingranaggi un semplice meccanismo di autori con il server. La funzione ritorna quindi a un oggetto autentico.
Infine, inviamo l'e -mail utilizzando la funzione Sendmail che passa l'indirizzo, l'oggetto autentico, il mittente, il destinatario e il messaggio come argomenti.
Metodo dell'auth di MailslUrper
Se si esegue il codice sopra su MailSlUrper, il server restituirà un errore come di seguito e chiuderà la connessione.
$ go we run email.andare
2022/02/02 02:52:39 SMTP: il server non supporta l'auth
Stato di uscita 1
Puoi risolverlo utilizzando una funzione Sendmail personalizzata. Un codice di esempio è come mostrato di seguito:
Pacchetto principale
importazione (
"codifica/base64"
"FMT"
"tronco d'albero"
"Net/SMTP"
"stringhe"
)
const (
Username = "LinuxHint"
Passwd = "password"
Host = "localhost"
)
func main ()
da: = "
[email protected] "
a: = [] string
"
[email protected] ",
msg: = [] byte ("Email Body: Welcome to Go!\ r \ n ")
err: = sendmail (host+": 2500", da "golang test email", stringa (msg), a)
Se err != nil
tronco d'albero.Fatale (err)
fmt.Println ("Mail inviato correttamente!")
func sendmail (addr, da, soggetto, stringa corpo, a [] stringa) errore
r: = stringhe.NewReplacer ("\ r \ n", "", "\ r", "", "\ n", "", "%0a", "", "%0d", "")
C, err: = SMTP.Quadrante (ADDR)
Se err != nil
restituire err
Defer c.Vicino()
Se err = c.Mail (r.Sostituire (da)); err != nil
restituire err
per i: = intervallo a
a [i] = r.Sostituire (a [i])
Se err = c.Rcpt (a [i]); err != nil
restituire err
w, err: = c.Dati()
Se err != nil
restituire err
msg: = "a:" + stringhe.Join (a ",") + "\ r \ n" +
"Da:" + da + "\ r \ n" +
"Oggetto:" + soggetto + "\ r \ n" +
"Content-type: text/html; chatset =" utf-8 "\ r \ n" +
"Codifica del contenuto-trasferimento: base64 \ r \ n" +
"\ r \ n" + base64.Stdencoding.Codetostring ([] byte (corpo))
_, err = w.Scrivere ([] byte (msg))
Se err != nil
restituire err
err = w.Vicino()
Se err != nil
restituire err
restituzione c.Esentato()
Golang Invia posta - Copia carbone
È inoltre possibile inviare e -mail a più utenti utilizzando la copia carbone e la copia carbone cieca. I destinatari CC saranno visibili a tutti.
Possiamo farlo usando il codice come di seguito:
Pacchetto principale
importazione (
"FMT"
"tronco d'albero"
"Net/SMTP"
"stringhe"
)
Tipo Mail Struct
Stringa mittente
Accordare
Cc [] stringa
Stringa bcc []
Stringa soggetto
Stringa del corpo
func main ()
Sender: = "
[email protected]"
a: = [] string
"
[email protected] ",
"
[email protected] ",
"
[email protected]",
cc: = [] string
"
[email protected] ",
"Un altro
[email protected] ",
Nome utente: = "LinuxHint"
passwd: = "password"
host: = "localhost"
Oggetto: = "Golang Mail Test"
Body: = "Message Body"
req: = mail
Sender: mittente,
A: a,
CC: CC,
Oggetto: soggetto,
Corpo: corpo,
msg: = composemsg (req)
AUTH: = SMTP.Plauauth ("", nome utente, passwd, host)
err: = SMTP.Sendmail (host+": 2500", autenticazione, mittente, a, [] byte (msg))
Se err != nil
tronco d'albero.Fatale (err)
fmt.Println ("Messaggio inviato correttamente!")
// Costruisci un messaggio in base al CC
func composemsg (posta postale) stringa
// stringa vuota
msg: = ""
// Imposta mittente
msg += fmt.Sprintf ("da: %s \ r \ n", posta.Mittente)
// Se più di 1 destinatario
Se len (posta.A)> 0
msg += fmt.Sprintf ("cc: %s \ r \ n", stringhe.Iscriviti (posta.Cc, ";"))
// Aggiungi soggetto
msg += fmt.Sprintf ("Oggetto: %s \ r \ n", posta.Soggetto)
// Aggiungi il corpo della posta
msg += fmt.Sprintf ("corpo: %s \ r \ n", posta.Corpo)
restituire msg
Il codice sopra invierà le e -mail ai destinatari specificati utilizzando il protocollo SMTP.
Chiusura
In questa guida, abbiamo esplorato le basi dell'utilizzo del pacchetto SMTP in GO per inviare e -mail a uno o più utenti. Controlla la documentazione per saperne di più.