mailer

package
v5.0.0-...-b98a0e9 Latest Latest
Warning

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

Go to latest
Published: Dec 3, 2024 License: AGPL-3.0 Imports: 27 Imported by: 0

README

Mailer Service

Generic service to send email. Encapsulates various implementations, currently :

  • SMTP server connection
  • SendMail call to sendmail on the command line
  • SendGrid Call to Sendgrid API

Queue

TODO: a queue mechanism to avoid spamming mail server should be implemented to batch emails.

GRPC and REST Services

A grpc service is used internally by other services to send email, e.g. by the Activity Service when sending user alerts or user digests, or the Scheduler service to send jobs results to Administrator, etc.

A REST service is exposed to the frontend to allow direct communication between users.

Documentation

Overview

Package mailer acts a central mail server for the application.

It implements various types of communication with actual mail servers (sendmail, smtp, sendgrid API) and a simple queue mechanism to avoid spamming these servers.

Index

Constants

View Source
const (
	// MaxSendRetries defines number of retries in case of connection failure.
	MaxSendRetries = 5
)

Variables

Functions

func MigrateQueue

func MigrateQueue(mainCtx, fromCtx, toCtx context.Context, dryRun bool, status chan service.MigratorStatus) (map[string]int, error)

MigrateQueue is a MigratorFunc to move queued emails from one Queue to another.

func NewGomailMessage

func NewGomailMessage(email *mailer.Mail) (*gomail.Message, error)

NewGomailMessage prepares a new Message to be sent.

func QueueJob

func QueueJob(name string) *jobs.Job

func RegisterQueueJob

func RegisterQueueJob(ctx context.Context, name string) error

RegisterQueueJob adds a job to the scheduler to regularly flush the queue

Types

type NoOpSender

type NoOpSender struct {
	// contains filtered or unexported fields
}

func (*NoOpSender) Check

func (n *NoOpSender) Check(ctx context.Context) error

func (*NoOpSender) Configure

func (n *NoOpSender) Configure(ctx context.Context, conf configx.Values) error

func (*NoOpSender) Send

func (n *NoOpSender) Send(ctx context.Context, email *mailer.Mail) error

type Queue

type Queue interface {
	Push(ctx context.Context, email *mailer.Mail) error
	Consume(context.Context, func(email *mailer.Mail) error) error
	Close(ctx context.Context) error
}

type SendGrid

type SendGrid struct {
	ApiKey string
}

SendGrid is a passerelle to Sendgrid API. It holds the application API Key.

func (*SendGrid) Check

func (s *SendGrid) Check(ctx context.Context) error

func (*SendGrid) Configure

func (s *SendGrid) Configure(ctx context.Context, config configx.Values) error

Configure expects a valid sendgrid API key.

func (*SendGrid) Send

func (s *SendGrid) Send(ctx context.Context, email *mailer.Mail) error

Send performs the real code to the sendgrid API.

type Sender

type Sender interface {
	Configure(ctx context.Context, conf configx.Values) error
	Send(ctx context.Context, email *mailer.Mail) error
	Check(ctx context.Context) error
}

func GetSender

func GetSender(ctx context.Context, t string, conf configx.Values) (Sender, error)

type Sendmail

type Sendmail struct {
	BinPath   string
	BinParams []string
}

func (*Sendmail) Check

func (s *Sendmail) Check(ctx context.Context) error

func (*Sendmail) Configure

func (s *Sendmail) Configure(ctx context.Context, conf configx.Values) error

func (*Sendmail) Send

func (d *Sendmail) Send(ctx context.Context, email *mailer.Mail) error

type Smtp

type Smtp struct {
	User               string
	Password           string
	Host               string
	Port               int
	LocalName          string
	InsecureSkipVerify bool
	UseSSL             bool
}

func (*Smtp) Check

func (gm *Smtp) Check(ctx context.Context) error

func (*Smtp) Configure

func (gm *Smtp) Configure(ctx context.Context, conf configx.Values) error

func (*Smtp) Send

func (gm *Smtp) Send(ctx context.Context, email *mailer.Mail) error

Directories

Path Synopsis
dao
service
Package service provides the actual logic for posting emails to queue or to mail servers
Package service provides the actual logic for posting emails to queue or to mail servers
Package lang provides i18n strings for mailer-related data.
Package lang provides i18n strings for mailer-related data.
service
Package service exposes a simple API for posting emails
Package service exposes a simple API for posting emails
Package templates defines ready-to-use templates to send email in a nice formatting.
Package templates defines ready-to-use templates to send email in a nice formatting.

Jump to

Keyboard shortcuts

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