Du kan ofta behöva skicka e-postmeddelanden till många konton med hjälp av program för autentisering och många andra ändamål.

SMTP-protokollet definierar standarder som tillåter e-postkommunikation mellan e-postservrar och e-postöverföringsagenter, medan IMAP-protokollet är för att ta emot e-post.

Go tillhandahåller funktionalitet för e-postrelaterade aktiviteter definierade av RFC i net/smtp-paketet, som också innehåller 8BITMIME, AUTH och STARTTLS-tillägg.

Koden som används i detta projekt är tillgänglig i en GitHub Repository och är gratis för dig att använda under MIT-licensen.

Hur man skickar e-postmeddelanden i Go med Net/SMTP-paketet

Net/smtp-paketet är en del av Go-standardbiblioteket, så du behöver inte installera något externt paket. Du behöver bara importera paketet innan du använder det.

importera (
"net/smtp"
"logga"
"krypto/tls"
"fmt"
)

Du måste också importera logga paket för att logga fel till konsolen och krypto/tls paket för att konfigurera en säker anslutning.

När du har importerat net/smtp-paketet bör du skriva en

instagram viewer
Skicka brev() funktion för att skicka posten och sedan anropa funktionen i huvudfunktionen.

funchuvud() {
fmt. Skriv ut (SendMail())
}
funcSkicka brev()sträng {
// Lägg till kod här
}

De Skicka brev() funktionen skulle innehålla koden som skickar posten till mottagarna.

Så fungerar det att skicka e-postmeddelanden

SMTP-protokollet definierar parametrarna som varje post måste ha. Dessa parametrar är avsändarens och mottagarens e-postadresser, en port på vilken e-posten skickas, en värdserver och ett meddelande.

Parametrarna som anges ovan är viktiga för att skicka e-post.

I den här handledningen lär du dig att skicka Yahoo-e-post. Processen är dock densamma för vilken e-postserverleverantör (MSP) du än använder.

Eftersom du använder Yahoo Mail, logga in på din Yahoo Mail konto, gå vidare till Konto information, och klicka på konto säkerhet flik. Skapa sedan ett applösenord. Du måste namnge appen, och sedan skapar Yahoo Mail ett lösenord för appen, och du kan använda lösenordet i din kod tillsammans med din e-postadress.

I den Skicka brev() funktion, kommer du att deklarera tre variabler; en variabel som innehåller strängen i din e-post, en som innehåller ditt e-postlösenord och en sträng som innehåller e-postadressen du skickar meddelanden till.

från := "[email protected]"
lösenord := "aSecurePasswordHere"
till := "[email protected]"

Du kan använda en skiva och slinga genom elementen om du tänker skicka dem till flera mottagare.

Hämta och ställa in e-postvärden och porten

SMTP-protokollet använder värd- och portnummer för att identifiera e-postkällan. Det är här din MSP kommer in. Du måste känna till värd- och portnumret som din MSP tillåter dig att använda.

Kontrollera den här resursen för en lista över MSP-värdar och portnummer om du använder offentliga e-postmeddelanden som Gmail, Yahoo eller Outlook. Google har stängt av "mindre säkra appar" för Gmail; du kanske vill säkra din applikation om du använder Gmail.

När du har fått portnumret och värdadressen, tilldela dem till variabler som detta:

värd := "smtp.mail.yahoo.com"
port := "465"

Värd- och portnumren ovan är från Yahoo Mail för användning på vanliga konton. Servern finns på smtp.mail.yahoo.com och du får använda port 465 att skicka e-postmeddelanden.

Deklarera innehållet i e-postmeddelandet

Nästa steg är att deklarera innehållet i mailet som variabler. Ämnet och kroppen utgör budskapet.

subject := "Hej, jag kollar bara på dig."
body := "Hoppas du mår bra! Hur mår du idag. "

De ämne variabel är ämnet för e-postmeddelandet; de kropp variabel är brödtexten i e-postmeddelandet du skickar.

Ställa in e-posthuvuden

Du måste göra en karta över strängar för att ange rubrikerna i e-postmeddelandet.

rubriker := göra(Karta[sträng]sträng)
rubriker["Från"] = från
rubriker["Till"] = till
rubriker["Ämne"] = ämne
meddelande := ""
för k, v := räckvidd rubriker {
meddelande += fmt. Sprintf("%s: %s\r", k, v)
}
meddelande += "\r" + body

Först skapar du en karta över strängnycklar och värden och ställer in rubrikerna för din adress, mottagarens adress och ämnet, som visas ovan. Använda en range for-loop på rubriker karta, en meddelande variabeln deklareras innehålla rubrikerna och meddelandet med hjälp av strängformatering.

Autentisera e-postmeddelandet

E-postmeddelandet behöver autentisering för att verifiera källan. Smtp-paketet tillhandahåller funktionalitet för e-postautentisering med hjälp av PlainAuth. De PlainAuth metoden tar in identiteten, avsändarens e-post, lösenord och värd som parametrar och returnerar en Auth objekt som du använder för att skicka e-postmeddelandet.

autentisera := smtp. PlainAuth("", från, lösenord, värd)

Identiteten är ditt användarnamn, som kan lämnas tomt, som i det här fallet.

Skapa en anslutning för e-post

Vissa e-postleverantörer kräver att du skickar e-postmeddelandet via en anslutning. I den här artikeln kommer vi att göra en TCP-anslutning till servern med TLS-konfigurationer.

tlsConfig := &tls. Config{
InsecureSkipVerify: Sann,
Servernamn: värd,
}

I koden ovan gjorde du en TLS-konfiguration genom att referera till Konfig strukturera var InsecureSkipVerify var inställd på Sann, och servernamnet tilldelades till värd variabel.

Du måste skapa en TCP-anslutning med hjälp av Ringa metod för tls paket. De ringa metoden tar in anslutningstypen (TCP), i det här fallet serveradressen och TLS-anslutningskonfigurationerna.


anslutning, fel := tls. Dial("tcp", serverAddress, tlsConfig) err != noll {
logga. Panik (fel)
}

I koden ovan gjorde du en TCP-anslutning och hanterade fel; du har instansierat ett nytt smtp-paket med hjälp av Ny kund metod för nät/smtp paket. De Ny kund metoden tar in en anslutning respektive värd.

smtpClient, err := smtp. NewClient (anslutning, värd)
om fel!= noll {
logga. Panik (fel)
}

Nu när du har skapat en smtp klientinstans måste du ställa in parametrarna för smtpClient och hantera fel.

om err = smtpClient. Auth (autenticera); fel!= noll {
logga. Panik (fel)
}
om err = smtpClient. Mail (från); fel!= noll {
logga. Panik (fel)
}
om err = smtpClient. Rcpt (rubriker["Till"]); fel!= noll {
logga. Panik (fel)
}

I exemplet ovan skickade du parametrarna för autentisering, avsändaradress och mottagaradress till deras respektive metoder och hanterade fel.

Slutligen måste du skriva till anslutningsinstansen, och du kan göra det genom att skapa en författare med hjälp av Data din metod smtp klient exempel.

författare, fel := smtpClient. Data()
om fel!= noll {
logga. Panik (fel)
}
_, fel = författare. Skriva([]byte(meddelande))
om fel!= noll {
logga. Panik (fel)
}

När du har skapat en skribent skriver du en byte-del av meddelandet med hjälp av Skriva metod som i exemplet ovan.

fel = författare. Stänga()
om fel!= noll {
logga. Panik (fel)
}
err = smtpClient. Sluta med()
om fel!= noll {
lämna tillbaka
}
lämna tillbaka "Lyckat, posten har skickats!"

Stäng skrivaren och avsluta smtp-klientanslutningsinstansen med ovanstående kod. De Skicka brev() funktion returnerar ett framgångsmeddelande, som visas ovan.

På att ringa till Skicka brev() funktion i huvud funktion bör du få framgångsmeddelandet loggat till din konsol och e-postmeddelandet skickat till din mottagare.

Det finns mer i nettopaketet

Netpaketet innehåller många paket för nätverksrelaterade funktioner och smtp-paketet är bara ett av dem. Du kan också använda TCP- och HTTP-paketen för nätverksrelaterad utveckling.

Du kanske tycker att net/smtp-paketet är överväldigande om du inte är en backend-utvecklare. Det finns många andra alternativ för att skicka e-post snabbt med färre rader kod. Du kan kolla in e-postmarknadsföringsföretag som SendGrid, Twilio och MailChimp och nyhetsbrevstjänster som Substack och Revue som låter dig skicka e-postmeddelanden till många användare utan stress.