go-smtpsrv

a tiny package that implements SMTP server for Go projects

Github stars Tracking Chart

A SMTP Server Package

a simple smtp server library, forked from This repo but I refactored it to be more advanced and organized

Features

  • Very simple
  • Automated SPF Checks
  • Automated FROM validation (MX checking), via Request.Mailable
  • Supports TLS
  • Modular, as you can add more smtp command processors to extend the functionality as you need

Quick Start

go get github.com/alash3al/go-smtpsrv

package main

import (
	"fmt"

	"github.com/alash3al/go-smtpsrv"
)

func main() {
	handler := func(req *smtpsrv.Request) error {
		// ...
		return nil
	}
	srv := &smtpsrv.Server{
		Name: "mail.my.server",
		Addr:        ":25025",
		MaxBodySize: 5 * 1024,
		Handler:     handler,
	}
	fmt.Println(srv.ListenAndServe())
}

Security

The smtp server also supports the STARTTLS option, if you use the ListenAndServeTLS variant.
You can also further customize the tls config as well.

server := smtp.Server{Name: "example.com", Debug: true}
config := &tls.Config{MinVersion:tls.VersionSSL30}
server.TLSConfig = config
log.Fatal(server.ListenAndServeTLS(":smtp", "cert.pem", "key.pem", nil))

Authentication

The smtp server also supports authentication via the PLAIN method. Ideally this would be
coupled with STARTTLS to ensure secrecy of passwords in transit. You can do this by creating
a custom server and registering the AUTH callback. This will be called everytime someone
attempts to authenticate.

server.Auth = func(username, password, remoteAddress string) error {
	if username == "user" && password == "p@$$w0rd" {
		return nil
	}
	return errors.New("Nope!")
}

Addressing and preventing open-relay

Since your callback is only called once the smtp protocol has progressed to the data point,
meaning the sender and recipient have been specified, the server also offers an Addressable
callback that can be used to deny unknown recipients.

server.Addressable = func(user, address string) bool {
	if user != ""{
		//Allow relay for authenticated users
		return true
	}
	if strings.HasSuffix(address, "example.com"){
		return true
	}
	return false
}

Main metrics

Overview
Name With Owneralash3al/go-smtpsrv
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2018-10-23 13:29:18
Pushed At2023-12-10 07:01:18
Last Commit At2022-09-14 22:27:10
Release Count4
Last Release Namev3.0.1 (Posted on )
First Release Namev1.0 (Posted on )
用户参与
Stargazers Count105
Watchers Count2
Fork Count30
Commits Count49
Has Issues Enabled
Issues Count7
Issue Open Count3
Pull Requests Count7
Pull Requests Open Count2
Pull Requests Close Count2
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private