Potrebbe essere spesso necessario inviare e-mail a molti account utilizzando programmi per l'autenticazione e molti altri scopi.

Il protocollo SMTP definisce gli standard che consentono la comunicazione e-mail tra server di posta e agenti di trasferimento della posta, mentre il protocollo IMAP è per la ricezione di e-mail.

Go fornisce funzionalità per le attività relative alla posta elettronica definite dall'RFC nel pacchetto net/smtp, che contiene anche le estensioni 8BITMIME, AUTH e STARTTLS.

Il codice utilizzato in questo progetto è disponibile in a Archivio GitHub ed è gratuito per l'uso con la licenza MIT.

Come inviare e-mail in Go utilizzando il pacchetto Net/SMTP

Il pacchetto net/smtp fa parte della libreria standard Go, quindi non è necessario installare alcun pacchetto esterno. Devi solo importare il pacchetto prima di usarlo.

importare (
"net/smtp"
"tronco d'albero"
"cripto/tls"
"fmt"
)

Dovrai anche importare il file tronco d'albero pacchetto per registrare gli errori sulla console e sul file cripto/tls pacchetto per configurare una connessione sicura.

instagram viewer

Dopo aver importato il pacchetto net/smtp, dovresti scrivere a Inviare una mail() funzione per inviare la posta e quindi chiamare la funzione nella funzione principale.

funzprincipale() {
fmt. Stampa (SendMail())
}
funzInviare una mail()corda {
// Aggiungi il codice qui
}

Il Inviare una mail() funzione conterrebbe il codice che invia la posta ai destinatari.

Come funziona l'invio di e-mail

Il protocollo SMTP definisce i parametri che ogni mail deve avere. Questi parametri sono gli indirizzi di posta del mittente e del destinatario, una porta su cui viene inviata la posta, un server host e un messaggio.

I parametri sopra indicati sono importanti per l'invio di e-mail.

In questo tutorial imparerai a inviare e-mail di Yahoo. Tuttavia, il processo è lo stesso per qualsiasi provider di server di posta (MSP) utilizzato.

Dato che stai usando Yahoo Mail, accedi al tuo Yahoo Mail conto, vai a Informazioni sull'account, e fare clic su Sicurezza dell 'Account scheda. Quindi genera una password per l'app. Dovrai dare un nome all'app, quindi Yahoo Mail creerà una password per l'app e potrai utilizzare la password nel codice insieme al tuo indirizzo e-mail.

Nel Inviare una mail() funzione, dichiarerai tre variabili; una variabile che contiene la stringa della tua e-mail, una che contiene la tua password e-mail e una stringa che contiene l'indirizzo e-mail a cui stai inviando i messaggi.

da := "[email protected]"
password := "aSecurePasswordqui"
a := "[email protected]"

Puoi usare una fetta e scorrere gli elementi se intendi inviarli a più destinatari.

Ottenere e impostare l'host e la porta e-mail

Il protocollo SMTP utilizza l'host e i numeri di porta per identificare l'origine dell'e-mail. È qui che entra in gioco il tuo MSP. Devi conoscere l'host e il numero di porta che il tuo MSP ti consente di utilizzare.

Controllare questa risorsa per un elenco di host MSP e numeri di porta se utilizzi email pubbliche come Gmail, Yahoo o Outlook. Google ha disattivato le "app meno sicure" per Gmail; potresti voler proteggere la tua applicazione se stai utilizzando Gmail.

Una volta che hai il numero di porta e l'indirizzo host, assegnali a variabili come questa:

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

I numeri di host e di porta sopra riportati provengono da Yahoo Mail per l'uso su account normali. Il server è ospitato su smtp.mail.yahoo.com e puoi utilizzare la porta 465 per inviare e-mail.

Dichiarazione del contenuto dell'e-mail

Il passaggio successivo consiste nel dichiarare il contenuto della posta come variabili. L'oggetto e il corpo costituiscono il messaggio.

soggetto := "Ehi, ti sto solo controllando."
body := "Spero che tu stia bene! Come stai oggi. "

Il materia variabile è l'oggetto dell'e-mail; il corpo variabile è il corpo dell'e-mail che stai inviando.

Impostazione delle intestazioni e-mail

Dovrai creare una mappa di stringhe per denotare le intestazioni dell'e-mail.

intestazioni := rendere(carta geografica[corda]corda)
headers["Da"] = da
headers["A"] = a
headers["Oggetto"] = oggetto
messaggio := ""
per k, v := gamma intestazioni {
messaggio += fmt. Sprintf("%s: %s\r", k, v)
}
messaggio += "\r" + corpo

Innanzitutto, crei una mappa di chiavi e valori di stringa e imposti le intestazioni del tuo indirizzo, l'indirizzo del destinatario e l'oggetto, come mostrato sopra. Utilizzando un ciclo for range sul intestazioni mappa, a Messaggio viene dichiarata la variabile per contenere le intestazioni e il messaggio utilizzando la formattazione delle stringhe.

Autenticazione dell'e-mail

L'e-mail necessita di autenticazione per verificare l'origine. Il pacchetto smtp fornisce funzionalità per l'autenticazione e-mail utilizzando l'estensione PlainAuth. Il PlainAuth accetta l'identità, l'e-mail del mittente, la password e l'host come parametri e restituisce un Aut oggetto che utilizzerai per inviare l'e-mail.

autentica := smtp. PlainAuth("", da, password, host)

L'identità è il tuo nome utente, che può essere lasciato vuoto, come si vede in questo caso.

Creazione di una connessione per l'e-mail

Alcuni fornitori di servizi di posta richiedono l'invio dell'e-mail tramite una connessione. In questo articolo creeremo un Connessione TCP al server con le configurazioni TLS.

tlsConfig := &tls. Config{
Insicuro Salta Verifica: VERO,
Nomeserver: host,
}

Nel codice sopra, hai effettuato una configurazione TLS facendo riferimento a Config struttura dove Insicuro SkipVerify era impostato su VEROe il nome del server è stato assegnato a ospite variabile.

È necessario creare una connessione TCP utilizzando il Comporre metodo del tel pacchetto. Il comporre il metodo accetta il tipo di connessione (TCP), in questo caso l'indirizzo del server e le configurazioni di connessione TLS.


connessione, err := tls. Dial("tcp", serverAddress, tlsConfig) err != zero {
tronco d'albero. Panico (err)
}

Nel codice sopra, hai effettuato una connessione TCP e gestito gli errori; avrai istanziato un nuovo pacchetto smtp usando Nuovo Cliente metodo del rete/smtp pacchetto. Il Nuovo Cliente il metodo accetta rispettivamente una connessione e un host.

smtpClient, err := smtp. NewClient (connessione, host)
Se ehm!= zero {
tronco d'albero. Panico (err)
}

Ora che hai creato un smtp istanza client, è necessario impostare i parametri di smtpClient e gestire gli errori.

Se err = smtpClient. Auth (autenticare); ehm!= zero {
tronco d'albero. Panico (err)
}
Se err = smtpClient. Posta (da); ehm!= zero {
tronco d'albero. Panico (err)
}
Se err = smtpClient. Rcpt (headers["A"]); ehm!= zero {
tronco d'albero. Panico (err)
}

Nell'esempio precedente, hai passato i parametri di autenticazione, indirizzo del mittente e indirizzo del destinatario ai rispettivi metodi e hai gestito gli errori.

Infine, devi scrivere sull'istanza di connessione e puoi farlo creando uno scrittore usando il Dati metodo del tuo client smtp esempio.

scrittore, err := smtpClient. Dati()
Se ehm!= zero {
tronco d'albero. Panico (err)
}
_, err = scrittore. Scrivere([]byte(Messaggio))
Se ehm!= zero {
tronco d'albero. Panico (err)
}

Dopo aver creato uno scrittore, scrivi una porzione di byte del messaggio usando il Scrivere metodo come nell'esempio sopra.

err = scrittore. Chiudere()
Se ehm!= zero {
tronco d'albero. Panico (err)
}
err = smtpClient. Uscire()
Se ehm!= zero {
Restituzione
}
Restituzione "Riuscito, la posta è stata inviata!"

Chiudi il writer e chiudi l'istanza di connessione del client smtp utilizzando il codice sopra. Il Inviare una mail() la funzione restituisce un messaggio di successo, come mostrato sopra.

Chiamando il Inviare una mail() funzione nel principale funzione, dovresti ottenere il messaggio di successo registrato sulla tua console e l'e-mail` inviata al tuo destinatario.

C'è di più nel pacchetto Net

Il pacchetto net contiene molti pacchetti per le funzionalità relative alla rete e il pacchetto smtp è solo uno di questi. È inoltre possibile utilizzare i pacchetti TCP e HTTP per lo sviluppo relativo alla rete.

Potresti trovare il pacchetto net/smtp travolgente se non sei uno sviluppatore di backend. Esistono molte altre alternative per inviare e-mail rapidamente con meno righe di codice. Puoi controllare società di email marketing come SendGrid, Twilio e MailChimp e servizi di newsletter come Substack e Revue che ti consentono di inviare e-mail a molti utenti senza stress.