knadh/smtppool

High throughput Go SMTP pool library with graceful handling of idle timeouts, errors, and retries.

Go

183

39 commits

updated Oct 6, 2026

See the code

README

smtppool

smtppool is a Go library that creates a pool of reusable SMTP connections for high throughput e-mailing. It gracefully handles idle connections, timeouts, and retries. The e-mail formatting, parsing, and preparation code is forked from jordan-wright/email.

Install

go get github.com/knadh/smtppool/v2

Usage

package main

import (
	"log"
	"time"

	"github.com/knadh/smtppool/v2"
)

func main() {
	// Try https://github.com/mailhog/MailHog for running a local dummy SMTP server.
	// Create a new pool.
	pool, err := smtppool.New(smtppool.Opt{
		Host:            "localhost",
		Port:            1025,
		MaxConns:        10,
		IdleTimeout:     time.Second * 10,
		PoolWaitTimeout: time.Second * 3,
		SSL:             smtppool.SSLNone
	})
	if err != nil {
		log.Fatalf("error creating pool: %v", err)
	}

	e:= smtppool.Email{
		From:    "John Doe <john@example.com>",
		To:      []string{"doe@example.com"},

		// Optional.
		Bcc:     []string{"doebcc@example.com"},
		Cc:      []string{"doecc@example.com"},

		Subject: "Hello, World",
		Text:    []byte("This is a test e-mail"),
		HTML:    []byte("<strong>This is a test e-mail</strong>"),
	}

	// Add attachments.
	if _, err := e.AttachFile("test.txt"); err != nil {
		log.Fatalf("error attaching file: %v", err)
	}

	if err := pool.Send(e); err != nil {
		log.Fatalf("error sending e-mail: %v", err)
	}
}

Licensed under the MIT license.

email-client
email-sender
pool
smtp
smtp-client

knadh/smtppool

High throughput Go SMTP pool library with graceful handling of idle timeouts, errors, and retries.

Go

183

39 commits

updated Oct 6, 2026

See the code

README

smtppool

smtppool is a Go library that creates a pool of reusable SMTP connections for high throughput e-mailing. It gracefully handles idle connections, timeouts, and retries. The e-mail formatting, parsing, and preparation code is forked from jordan-wright/email.

Install

go get github.com/knadh/smtppool/v2

Usage

package main

import (
	"log"
	"time"

	"github.com/knadh/smtppool/v2"
)

func main() {
	// Try https://github.com/mailhog/MailHog for running a local dummy SMTP server.
	// Create a new pool.
	pool, err := smtppool.New(smtppool.Opt{
		Host:            "localhost",
		Port:            1025,
		MaxConns:        10,
		IdleTimeout:     time.Second * 10,
		PoolWaitTimeout: time.Second * 3,
		SSL:             smtppool.SSLNone
	})
	if err != nil {
		log.Fatalf("error creating pool: %v", err)
	}

	e:= smtppool.Email{
		From:    "John Doe <john@example.com>",
		To:      []string{"doe@example.com"},

		// Optional.
		Bcc:     []string{"doebcc@example.com"},
		Cc:      []string{"doecc@example.com"},

		Subject: "Hello, World",
		Text:    []byte("This is a test e-mail"),
		HTML:    []byte("<strong>This is a test e-mail</strong>"),
	}

	// Add attachments.
	if _, err := e.AttachFile("test.txt"); err != nil {
		log.Fatalf("error attaching file: %v", err)
	}

	if err := pool.Send(e); err != nil {
		log.Fatalf("error sending e-mail: %v", err)
	}
}

Licensed under the MIT license.

email-client
email-sender
pool
smtp
smtp-client

Project health

Overall

3.6/10

Maintained

3/10

Code review

4/10
OpenSSF Scorecard

Latest release

v1.3.0 · Dec 26, 2024

Releases this year

0

Significant stargazers

Kaustubh M

178 followers · starred Jan 2022