Basic Configuration

package main

import (
    "crypto/tls"
    "fmt"
    "net/smtp"
    "strings"
)

const (
    SMTPHost = "smtp.lettermint.co"
    SMTPPort = "587"
    Username = "lettermint"
    APIToken = "your-api-token"
)

func sendEmail(to, subject, body string) error {
    from := "sender@yourdomain.com"

    // Message
    msg := []byte(fmt.Sprintf(
        "From: %s\r\n"+
        "To: %s\r\n"+
        "Subject: %s\r\n"+
        "Content-Type: text/html; charset=UTF-8\r\n"+
        "\r\n"+
        "%s\r\n",
        from, to, subject, body,
    ))

    // Authentication
    auth := smtp.PlainAuth("", Username, APIToken, SMTPHost)

    // TLS config
    tlsConfig := &tls.Config{
        InsecureSkipVerify: false,
        ServerName:         SMTPHost,
    }

    // Connect and send
    conn, err := tls.Dial("tcp", SMTPHost+":"+SMTPPort, tlsConfig)
    if err != nil {
        return err
    }
    defer conn.Close()

    client, err := smtp.NewClient(conn, SMTPHost)
    if err != nil {
        return err
    }
    defer client.Quit()

    if err = client.Auth(auth); err != nil {
        return err
    }

    if err = client.Mail(from); err != nil {
        return err
    }

    if err = client.Rcpt(to); err != nil {
        return err
    }

    writer, err := client.Data()
    if err != nil {
        return err
    }

    _, err = writer.Write(msg)
    if err != nil {
        return err
    }

    return writer.Close()
}

func main() {
    err := sendEmail(
        "recipient@example.com",
        "Test Email",
        "<h1>Hello!</h1><p>This is a test email.</p>",
    )

    if err != nil {
        fmt.Printf("Error: %v\n", err)
    } else {
        fmt.Println("Email sent successfully")
    }
}

Using Third-Party Libraries

With gomail

go get gopkg.in/gomail.v2
package main

import (
    "gopkg.in/gomail.v2"
)

func sendEmailWithGomail() error {
    m := gomail.NewMessage()
    m.SetHeader("From", "sender@yourdomain.com")
    m.SetHeader("To", "recipient@example.com")
    m.SetHeader("Subject", "Test Email")
    m.SetBody("text/html", "<h1>Hello!</h1><p>This is a test email.</p>")

    d := gomail.NewDialer("smtp.lettermint.co", 587, "lettermint", "your-api-token")

    return d.DialAndSend(m)
}