21 Commits
0.2.4 ... 0.5.0

Author SHA1 Message Date
c1a54b5cc0 doc fix
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2026-01-15 13:41:12 +01:00
a156b54c1f test m4 change 2
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-01-15 13:39:17 +01:00
0a65e0e7db test m4 change
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2026-01-15 13:31:57 +01:00
cd9adb1423 fix base image tag
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2026-01-15 12:50:09 +01:00
2cce315ca3 fix ci script
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline failed
2026-01-15 12:44:18 +01:00
1c06333c79 alpine image updated
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-01-15 12:39:22 +01:00
7afcbc2bf1 merged
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-03-17 20:26:48 +01:00
f1b14d5974 scan only for tags 2025-03-17 20:25:33 +01:00
edd8a42e2d disable vex warning of trivy
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-02-28 21:37:29 +01:00
fe0bd0470c Merge branch 'master' of gitea.hottis.de:wn/exim-docker
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-02-28 21:28:26 +01:00
1d92622f21 fix acl definition 2025-02-28 21:28:20 +01:00
16e35505d6 Merge branch 'master' of gitea.hottis.de:wn/exim-docker
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-02-28 21:15:29 +01:00
5819107340 add tool 2025-02-28 21:14:33 +01:00
f08937111e Merge branch 'master' of gitea.hottis.de:wn/exim-docker
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-02-28 21:03:46 +01:00
dbb79dd567 fix Dockerfile 2025-02-28 21:03:38 +01:00
e1d0f95a72 adjust docu
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-02-28 20:15:24 +01:00
a2b000a05b adjust example
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2025-02-28 20:12:13 +01:00
8fbca20ffe add sbom stuff
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-02-28 20:07:59 +01:00
0fc12e5f3c update alpine base image
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2025-02-28 20:05:13 +01:00
8502fbd9a1 fix concerning whitelist handling
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-02-28 20:03:53 +01:00
7adb4c1fde whitelist
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-02-28 20:01:44 +01:00
6 changed files with 102 additions and 17 deletions

View File

@@ -12,13 +12,8 @@ steps:
from_secret: container_registry_password
dockerfile: Dockerfile
when:
- event: [push, tag]
scan_image:
image: aquasec/trivy
commands:
- trivy image $FORGE_NAME/$CI_REPO:$CI_COMMIT_SHA --quiet --exit-code 1
when:
- event: [push, tag]
- event: tag
build:
image: plugins/kaniko
settings:
@@ -33,4 +28,4 @@ steps:
from_secret: quay_password
dockerfile: Dockerfile
when:
- event: [tag]
- event: tag

View File

@@ -1,4 +1,4 @@
FROM alpine:3.21.0
FROM alpine:3.23.2
LABEL Maintainer="Wolfgang Hottgenroth <woho@hottis.de>"
LABEL ImageName="quay.io/wollud1969/exim-docker"
@@ -11,6 +11,9 @@ ENV SMARTHOST_USER=""
ENV SMARTHOST_PASS=""
# ip addresses or networks to allow for relaying, separate multiple ones by semicolon
ENV RELAYNETS="127.0.0.1/32"
# whitelist of recipient domains, colon-separated, if empty all no restrictions
ENV WHITELISTED_RECIPIENTS=""
RUN apk add --no-cache exim m4
@@ -22,7 +25,6 @@ WORKDIR /etc/exim
EXPOSE 25
CMD [ "./start.sh" ]
#CMD [ "/usr/bin/m4 exim.conf.m4 > exim.conf && /usr/sbin/exim -bd -q15m -v" ]

View File

@@ -2,6 +2,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: smtp
namespace: system
labels:
app: smtp
annotations:
@@ -18,7 +19,7 @@ spec:
spec:
containers:
- name: smtp
image: quay.io/wollud1969/exim-docker:0.2.1
image: quay.io/wollud1969/exim-docker:0.3.4
envFrom:
- secretRef:
name: smtp-secrets
@@ -30,6 +31,7 @@ apiVersion: v1
kind: Service
metadata:
name: smtp
namespace: system
spec:
type: ClusterIP
selector:

View File

@@ -5,11 +5,8 @@ define(`SMARTHOST', esyscmd(`echo -n $SMARTHOST'))dnl
define(`SMARTHOST_USER', esyscmd(`echo -n $SMARTHOST_USER'))dnl
define(`SMARTHOST_PASS', esyscmd(`echo -n $SMARTHOST_PASS'))dnl
define(`RELAYNETS', esyscmd(`echo -n $RELAYNETS'))dnl
define(`WHITELISTED_RECIPIENTS', esyscmd(`echo -n $WHITELISTED_RECIPIENTS'))dnl
ifelse(SMARTHOST, `', `
errprint(`Error: SMARTHOST not set')
m4exit(1)
')
ifelse(HOSTNAME, `', `
errprint(`Error: HOSTNAME not set')
@@ -26,6 +23,19 @@ acl_smtp_rcpt = acl_check_rcpt
tls_advertise_hosts =
ifelse(SMARTHOST, `', `dnl
# without smarthost
begin routers
dnslookup:
driver = dnslookup
domains = *
transport = remote_smtp
begin transports
driver = smtp
', `dnl
# with smarthost
begin routers
smarthost_route:
driver = manualroute
@@ -54,13 +64,17 @@ login:
public_name = LOGIN
client_send = : SMARTHOST_USER : SMARTHOST_PASS
')
')
begin acl
acl_check_rcpt:
accept
hosts = RELAYNETS
ifelse(WHITELISTED_RECIPIENTS, `', `', `
domains = WHITELISTED_RECIPIENTS
')
deny
message = "Relaying denied"
message = "550 5.7.1 Relaying denied"
ifelse(LOCALMAILNAME, `', `', `
begin rewrite

View File

@@ -12,8 +12,11 @@ Four environment variables are used to configure the container:
* `SMARTHOST_PASS`: Password for smarthost.
* `LOCALMAILNAME`: The domain name which shall be used as the domain part of the sender address in every outgoing mail. If not required, skip it.
* `RELAYNETS`: Networks exim in this container accepts for relaying. Separate multiple networks by semicolon.
* `WHITELISTED_RECIPIENT`: Colon-separated list of whitelisted recipient domains, if empty no recipient restrictions will be applied
If `SMARTHOST` is not given, mail delivery will be done directly via MX lookup instead of using a smarthost.
## Deployment
Typically, don't expose the smtp port of this container to the default network of your Docker installation, otherwise it conflicts with a local MTA on the machine and it would be visible outside of the machine. Create a dedicated docker network, use that one as the default network for this container and connect other containers to that network. Afterwards, you can use the name of this container as smarthost address in the other containers.
@@ -24,7 +27,7 @@ Typically, don't expose the smtp port of this container to the default network o
```
#!/bin/bash
IMAGE=quay.io/wollud1969/exim-docker:0.2.2
IMAGE=quay.io/wollud1969/exim-docker:0.3.2
MAILER_NETWORK=mailer-network
docker network create $MAILER_NETWORK || echo "mailer-network already exists"
@@ -38,6 +41,7 @@ docker run \
-e SMARTHOST=smarthost.example.com \
-e LOCALMAILNAME=krohne.com \
-e RELAYNETS=$RELAYNETS \
-e WHITELISTED_RECIPIENT="example-recipients.com" \
--network $MAILER_NETWORK \
--name mailer \
--restart always \

68
tools/smtp-dialog.exp Executable file
View File

@@ -0,0 +1,68 @@
#!/usr/bin/expect
package require base64
# SMTP-Server und Port definieren
set smtp_server "172.16.3.33"
set smtp_port "25"
set timeout 25
# Absender, Empfänger und Nachricht
set sender $env(SMTP_SENDER)
set recipient $env(SMTP_RECIPIENT)
set message "Subject: Test Email\r\n\r\nThis is a test email sent via an expect script."
set smtp_user $env(SMTP_USER)
set smtp_pass $env(SMTP_PASS)
set smtp_user_64 [base64::encode $smtp_user]
set smtp_pass_64 [base64::encode $smtp_pass]
# Verbindung herstellen
spawn nc -C $smtp_server $smtp_port
# Begrüßung vom Server erwarten
expect "220 *"
# HELO/EHLO senden
send "EHLO baikonur\n"
expect "250 *"
if {[info exists smtp_user] && $smtp_user ne ""} {
send "AUTH LOGIN\n"
expect "334 VXNlcm5hbWU6"
send "$smtp_user_64\n"
expect "334 UGFzc3dvcmQ6"
send "$smtp_pass_64\n"
expect "235 2.7.0 Authentication successful"
} else {
puts "skip authentication"
}
# Absender definieren
send "MAIL FROM:<$sender>\n"
expect "250 *"
# Empfänger definieren
send "RCPT TO:<$recipient>\n"
expect "250 *"
# Datenübertragung starten
send "DATA\n"
expect "354 *"
# Nachricht senden und Übertragung abschließen
send "$message\n.\n"
expect "250 *"
# Verbindung schließen
send "QUIT\n"
expect "221 *"
# Beenden
interact