mail

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 25, 2026 License: MIT Imports: 6 Imported by: 0

README

Mail

Go Reference CI Status

A small modular Go package for sending HTML emails across multiple backends (SMTP, AWS SES v2, OCI).

The current implementation supports:

  • SMTP
  • AWS SES v2
  • Oracle Cloud Infrastructure Email Delivery through SMTP

This project is intentionally basic right now. It provides a shared sender interface, simple YAML configuration loading, message validation, and provider-specific senders.

Requirements

  • Go 1.26.4 or newer, as declared in go.mod
  • Provider credentials for the mail backend you want to use

Installation

go get github.com/more-shubham/mail

Configuration

Create a config.yaml file:

app:
  name: mail
  environment: development

mail:
  type: smtp
  from: no-reply@example.com
  smtp:
    host: localhost
    port: 1025
    username: ""
    password: ""
  ses:
    region: us-east-1
  oci:
    host: smtp.email.us-ashburn-1.oci.oraclecloud.com
    port: 587
    username: ""
    password: ""

Set mail.type to one of:

  • smtp
  • ses
  • oci
SMTP

SMTP requires:

  • mail.from
  • mail.smtp.host
  • mail.smtp.port

username and password are optional. If either value is set, the SMTP sender uses plain authentication.

AWS SES

SES requires:

  • mail.from
  • mail.ses.region

AWS credentials are loaded with the default AWS SDK configuration chain, so environment variables, shared config files, roles, and other standard AWS credential sources can be used.

OCI Email Delivery

OCI requires:

  • mail.from
  • mail.oci.host
  • mail.oci.port
  • mail.oci.username
  • mail.oci.password

OCI Email Delivery is sent through SMTP using plain authentication.

Usage

Load and validate configuration:

package main

import (
	"log"

	mail "github.com/more-shubham/mail"
	"github.com/more-shubham/mail/config"
)

func main() {
	appConfig, err := config.Load("config.yaml")
	if err != nil {
		log.Fatal(err)
	}

	if err := mail.Init(appConfig); err != nil {
		log.Fatal(err)
	}

	if err := mail.Send("user@example.com", "Welcome", "<h1>Hello</h1>"); err != nil {
		log.Fatal(err)
	}
}

mail.Init validates the shared mail config, validates the selected provider config, and initializes the matching sender.

All providers implement:

type Sender interface {
	Send(to string, subject string, html string) error
}

Project Structure

config/        YAML config loading and validation
message/       Email validation and HTML MIME message building
provider/      SMTP, SES, and OCI sender implementations
sender/        Shared Sender interface
main.go        Package documentation
init.go        Public Init and Send helpers

Current Limitations

  • Only HTML email bodies are supported.
  • Only one recipient is supported per Send call.
  • No attachments, CC, BCC, reply-to, or templates are implemented yet.
  • The module is still beta and the public API may change.

Development

Run tests:

go test ./...

Code of Conduct

Participation in this project is covered by the Code of Conduct.

License

This project is open source under the MIT License.

Documentation

Overview

Package mail provides a lightweight, modular Go email delivery package supporting multiple backend providers.

Supported providers include:

  • Standard SMTP (with optional plain authentication)
  • AWS SES v2 (using standard AWS SDK credential resolution)
  • Oracle Cloud Infrastructure (OCI) Email Delivery via SMTP

Quick Start

appConfig, err := config.Load("config.yaml")
if err != nil {
	log.Fatal(err)
}

if err := mail.Init(appConfig); err != nil {
	log.Fatal(err)
}

err = mail.Send("user@example.com", "Welcome", "<h1>Hello</h1>")

For full details and examples, visit https://github.com/more-shubham/mail.

Example

Example demonstrates loading configuration and initializing the mail package.

package main

import (
	"fmt"
	"log"

	mail "github.com/more-shubham/mail"
	"github.com/more-shubham/mail/config"
)

func main() {
	appConfig, err := config.Load("config.yaml")
	if err != nil {
		log.Fatal(err)
	}

	if err := mail.Init(appConfig); err != nil {
		log.Fatal(err)
	}

	if err := mail.Send("user@example.com", "Welcome to Our Platform", "<h1>Hello from Mail!</h1>"); err != nil {
		log.Fatal(err)
	}

	fmt.Println("Email sent successfully")
}

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Init

func Init(appConfig config.Config) error

func Send

func Send(to string, subject string, html string) error

Types

This section is empty.

Directories

Path Synopsis
provider
oci
ses

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL