Mail

View as MarkdownEdit on GitHub

FastSchema provides a simple and flexible API for sending emails. The fs.Mailer interface is a contract that defines how to send emails.

FastSchema provides a simple and flexible API for sending emails. The fs.Mailer interface is a contract that defines how to send emails.

Supported mail drivers:

  • SMTP

Help Wanted

The FastSchema mail system is still in its early stages and lacks support for many mail drivers.

If you're using an unsupported mail driver, please consider contributing a driver for it or requesting support via GitHub issues

Mailer interface

A fs.Mailer is an interface that defines how to send emails.

type Mailer interface {
	Send(mail *Mail, froms ...mail.Address) error
	Name() string
	Driver() string
}

type Mail struct {
	Subject string
	Body    string
	To      []string
	CC      []string
	BCC     []string
}

Configuration

type MailConfig struct {
	SenderName        string `json:"sender_name"`
	SenderMail        string `json:"sender_mail"`
	DefaultClientName string `json:"default_client"`
	Clients           []Map  `json:"clients"`
}

// type Map map[string]interface{}
  • sender_name: The name of the sender, if not provided, the application name will be used.
  • sender_mail: The email of the sender.
  • default_client: The default client name to use.
  • clients: A list of mail clients.

For example, the following configuration will create two mail clients, smtp and mailtrap.

{
  "sender_name": "FastSchema Accounts",
  "sender_mail": "accounts@fastschema.com",
  "default_client": "mailtrapsmtp",
  "clients": [
    {
      "name": "mailtrapsmtp",
      "driver": "smtp",
      "host": "sandbox.smtp.mailtrap.io",
      "port": 2525,
      "username": "username",
      "password": "password"
    }
  ]
}

There are two methods for configuring mail:

  • Using environment variables:
    • MAIL: A string representing a JSON object with mail configurations fs.MailConfig.
  • Using application configuration:
    • app.Config.MailConfig: A fs.MailConfig object with mail configurations.

If there is no configuration for the default mail client, the first mail client in the configuration will be used as the default mailer.