Sending emails with Golang

  • 20 June 2020
  • ADM


Sending emails with Golang - images/logos/golang.jpg


To send an email directly from Golang you can use the package smtp which implements the Simple Mail Transfer Protocol (SMTP) as defined in RFC 5321. You also need a mail server, for this tutorial will use the Gmail mail server.


For this application to work, Gmail need to allow access to less secure applications in Gmail, you can do it from this link and activating the switch.

Sending emails with Golang - /images/sendEmail001.jpg

If you have active a signing in with 2-Step Verification then this option is disabled and this Golang application will not work at all.

Sending emails with Golang - /images/sendEmail002.jpg

If you still want to try this application you will need first to disable the 2-Step Verification and then to allow less secure application to access your Gmail account.

Golang send email code

package main

import (

func main() {
	// 'from' data
	from := ""
	password := "MyComplicatedPassw0rd"

	// 'to' email addresses
	to := []string{
		//You can add more than one 'to' email addresses

	// smtp host server configuration
	smtpHost := ""
	smtpPort := "587"

	// Authentication.
	auth := smtp.PlainAuth("", from, password, smtpHost)

	// Message.
	message := "To:\r\n" +
		"Subject: Test email using Gmail!\r\n" +
		"\r\n" +
		"This is the email body.\r\n"
	// Sending email.
	err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, []byte(message))
	if err != nil {
	fmt.Println("Email Sent!")


Email Sent!

For this tutorial I used a Gmail address as recipient.

Sending emails with Golang - /images/sendEmail003.jpg


There are three main possible errors that you might run into.

If you entered the wrong credentials.

535 5.7.8 Username and Password not accepted. Learn more at
5.7.8 c12sm1308020wml.39 - gsmtp

If you didn't turn OFF the Less Secure App access yet.

534 5.7.9 Application-specific password required. Learn more at
5.7.9 1sm4251935wmf.0 - gsmtp

If you have entered wrong recipient email Address.

553 5.1.2 The recipient address <recipient-email> is not a valid RFC-5321
5.1.2 address. 63sm9682176wra.86 - gsmtp



To compile the code navigate to the file location and run the following command.

$ go build example.go

Assuming that example.go is the name of your file.

Then depending on if you are on Linux or Windows the binary file is created.

To run the application, execute the command.


$ ./example


c:\Users\adm\go\tutorials> example.exe

If you want to compile and run the application in one single step, run the following command:

go run example.go