From cf9a3dd55b238d54bdb89f963e513f10a07c73b6 Mon Sep 17 00:00:00 2001 From: JigSaw Date: Thu, 10 Aug 2023 00:23:00 +0200 Subject: [PATCH] feat(store): add postfix-relay app (#974) Co-authored-by: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com> --- apps/postfix-relay/config.json | 72 +++++++++++++++++++++ apps/postfix-relay/docker-compose.yml | 31 +++++++++ apps/postfix-relay/metadata/description.md | 37 +++++++++++ apps/postfix-relay/metadata/logo.jpg | Bin 0 -> 26864 bytes 4 files changed, 140 insertions(+) create mode 100644 apps/postfix-relay/config.json create mode 100644 apps/postfix-relay/docker-compose.yml create mode 100644 apps/postfix-relay/metadata/description.md create mode 100644 apps/postfix-relay/metadata/logo.jpg diff --git a/apps/postfix-relay/config.json b/apps/postfix-relay/config.json new file mode 100644 index 00000000..b1ea37b6 --- /dev/null +++ b/apps/postfix-relay/config.json @@ -0,0 +1,72 @@ +{ + "$schema": "../schema.json", + "name": "Postfix Mail Relay", + "available": true, + "exposable": false, + "no_gui": true, + "port": 2525, + "id": "postfix-relay", + "tipi_version": 1, + "version": "1.4.0", + "categories": [ + "utilities" + ], + "description": "Simple SMTP relay for environments where you may have private servers with no Internet connection.", + "short_desc": "Simple SMTP relay for environments where you may have private servers with no Internet connection.", + "author": "shamil", + "source": "https://github.com/shamil/docker-postfix-relay", + "form_fields": [ + { + "type": "text", + "label": "Accepted Networks", + "hint": "Space delimited list of networks to accept mail from.", + "placeholder": "192.168.0.0/16 172.16.0.0/12 10.0.0.0/8", + "env_variable": "RELAY_ACCEPTED_NETWORKS" + },{ + "type": "text", + "label": "SMTP Host", + "hint": "External relay DNS name.", + "placeholder": "smtp.sendgrid.net", + "required": true, + "env_variable": "RELAY_SMTP_HOST" + }, + { + "type": "text", + "label": "SMTP Login", + "hint": "Login to connect to the external relay.", + "placeholder": "apikey", + "required": true, + "env_variable": "RELAY_SMTP_LOGIN" + }, + { + "type": "password", + "label": "SMTP Password", + "hint": "Password to connect to the external relay.", + "placeholder": "password", + "required": true, + "env_variable": "RELAY_SMTP_PASSWORD" + }, + { + "type": "number", + "label": "SMTP Port", + "hint": "External relay TCP port.", + "placeholder": "25", + "required": false, + "env_variable": "RELAY_SMTP_PORT" + }, + { + "type": "text", + "label": "TLS Verify", + "hint": "Trust level for checking remote side cert: http://www.postfix.org/postconf.5.html#smtp_tls_security_level", + "placeholder": "none|may|encrypt|dane|dane-only|fingerprint|verify|secure", + "env_variable": "RELAY_TLS_VERIFY" + }, + { + "type": "text", + "label": "Use TLS", + "hint": "Remote require tls.", + "placeholder": "yes|no", + "env_variable": "RELAY_USE_TLS" + } + ] +} \ No newline at end of file diff --git a/apps/postfix-relay/docker-compose.yml b/apps/postfix-relay/docker-compose.yml new file mode 100644 index 00000000..5aa5b25e --- /dev/null +++ b/apps/postfix-relay/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.8" + +services: + postfix-relay: + container_name: postfix-relay + # user: root + image: simenduev/postfix-relay:1.4.0 + restart: unless-stopped + ports: + - ${APP_PORT}:25 + volumes: + - ${APP_DATA_DIR}/data/config:/root/config:rw + environment: + - ACCEPTED_NETWORKS=${RELAY_ACCEPTED_NETWORKS} + - SMTP_HOST=${RELAY_SMTP_HOST} + - SMTP_LOGIN=${RELAY_SMTP_LOGIN} + - SMTP_PASSWORD=${RELAY_SMTP_PASSWORD} + - SMTP_PORT=${RELAY_SMTP_PORT} + - TLS_VERIFY=${RELAY_TLS_VERIFY} + - USE_TLS=${RELAY_USE_TLS} + healthcheck: + test: netstat -an | grep 25 > /dev/null; if [ 0 != $? ]; then exit 1; fi; + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + networks: + - tipi_main_network + labels: + # Main + traefik.enable: false \ No newline at end of file diff --git a/apps/postfix-relay/metadata/description.md b/apps/postfix-relay/metadata/description.md new file mode 100644 index 00000000..bcfa6f6b --- /dev/null +++ b/apps/postfix-relay/metadata/description.md @@ -0,0 +1,37 @@ +# Postfix Mail Relay + +Simple SMTP relay, originally based on [alterrebe/docker-mail-relay](https://github.com/alterrebe/docker-mail-relay), but has been rewritten since. + +## Description + +The container provides a simple SMTP relay for environments like Amazon VPC where you may have private servers with no Internet connection +and therefore with no access to external mail relays (e.g. Amazon SES, SendGrid and others). You need to supply the container with your +external mail relay address and credentials. The image is tested with `Amazon SES`, `Sendgrid`, `Gmail` and `Mandrill` + +## Changes since `alterrebe/docker-mail-relay` + +* Uses `alpine` image instead of `ubuntu`. +* Uses `envsubst` for templating instead of `j2cli`. +* All output goes to `stdout` and `stderr` including `maillog`. +* Included `superviserd` event watcher which will exit the `supervisord` process if one of the monitored processes dies unexpectedly. +* Doesn't use TLS on `smtpd` side. +* And other changes to make the image as **KISS** as possible + +## Changed in version `1.3.0` + +* Remove `rsyslog` dependancy +* Remove `supervisor` +* Even more **KISS**, just single script used to configure and run `postfix` + +## Environment variables + +| ENV. Variable | Description | +| ------------------------ | -----------------------------------------------------------------------------------------------------------------------------------| +| `ACCEPTED_NETWORKS` | Space delimited list of networks to accept mail from. Default: `192.168.0.0/16 172.16.0.0/12 10.0.0.0/8` | +| `RECIPIENT_RESTRICTIONS` | Space delimited list of allowed `RCPT TO` addresses. Default: **unrestricted** | +| `SMTP_HOST` | External relay DNS name. Default: `email-smtp.us-east-1.amazonaws.com` | +| `SMTP_LOGIN` | Login to connect to the external relay. **Required** | +| `SMTP_PASSWORD` | Password to connect to the external relay. **Required** | +| `SMTP_PORT` | External relay TCP port. Default: `25` | +| `TLS_VERIFY` | Trust level for checking remote side cert. Default: `may` () | +| `USE_TLS` | Remote require tls. Must be `yes` or `no`. Default: `no` | \ No newline at end of file diff --git a/apps/postfix-relay/metadata/logo.jpg b/apps/postfix-relay/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3f4a94e97339b51722750b38247bf277202e524 GIT binary patch literal 26864 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�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 literal 0 HcmV?d00001