Initial commit

This commit is contained in:
Jamie Nguyen
2018-07-11 11:58:52 +01:00
commit 80532ca493
3 changed files with 123 additions and 0 deletions

18
Dockerfile Normal file
View File

@@ -0,0 +1,18 @@
FROM debian:stretch-slim
MAINTAINER Bytemark Hosting "support@bytemark.co.uk"
# Install exim4
ENV DEBIAN_FRONTEND noninteractive
RUN set -ex; \
apt-get update; \
apt-get install -y exim4-daemon-light; \
apt-get clean
# Copy the main script.
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
# We expose exim on port 25.
EXPOSE 25/tcp
ENTRYPOINT [ "docker-entrypoint.sh" ]
CMD [ "exim", "-bdf", "-v", "-q30m" ]

64
README.md Normal file
View File

@@ -0,0 +1,64 @@
# https://github.com/BytemarkHosting/docker-smtp
## Maintained by: [Bytemark Hosting](https://www.bytemark.co.uk)
This is the Git repo of the bytemark/smtp image.
This image allows linked containers to send outgoing email. You can configure
it to send email directly to the recipient, or to act as a smart host and relay
mail to an intermediate server (eg, GMail, SendGrid).
## Usage
In the following examples, linked containers would be able to connect via SMTP
to hostname `mail` and port `25` to send outoing email.
### Basic SMTP server
In this example, linked containers can connect to hostname `mail` and port `25`
to send outgoing email. The SMTP container sends email out directly.
```
docker run --restart always --name mail -d bytemark/smtp
```
Via Docker Compose:
```
mail:
image: bytemark/smtp
restart: always
```
Optionally, set `MAILNAME` environment variable. (By default, Exim will use the
hostname of the container.)
### SMTP smart host
In this example, linked containers can connect to hostname `mail` and port `25`
to send outgoing email. The SMTP container acts as a smart host and relays mail
to an intermediate server server (eg, GMail, SendGrid).
```
docker run --restart always --name mail -d bytemark/smtp \
-e RELAY_HOST=smtp.example.com \
-e RELAY_PORT=587 \
-e RELAY_USERNAME=alice@example.com \
-e RELAY_PASSWORD=secretpassword
```
Via Docker Compose:
```
mail:
image: bytemark/smtp
restart: always
environment:
RELAY_HOST: smtp.example.com
RELAY_PORT: 587
RELAY_USERNAME: alice@example.com
RELAY_PASSWORD: secretpassword
```
Optionally, set `MAILNAME` environment variable. (By default, Exim will use the
hostname of the container.)

41
docker-entrypoint.sh Executable file
View File

@@ -0,0 +1,41 @@
#!/bin/sh
set -e
CONFDIR=/etc/exim4
# Set smarthost.
DC_EXIMCONFIG_CONFIGTYPE="internet"
if [ "x$RELAY_HOST" != "x" ]; then
DC_EXIMCONFIG_CONFIGTYPE="satellite"
DC_SMARTHOST="$RELAY_HOST::${RELAY_PORT:-25}"
if [ "x$RELAY_USERNAME" != "x" ] && [ "x$RELAY_PASSWORD" != "x" ]; then
printf '%s\n' "*:$RELAY_USERNAME:$RELAY_PASSWORD" > "$CONFDIR/passwd.client"
fi
fi
# Write exim configuration.
cat << EOF > "$CONFDIR/update-exim4.conf.conf"
dc_eximconfig_configtype='$DC_EXIMCONFIG_CONFIGTYPE'
dc_other_hostnames=''
dc_local_interfaces='0.0.0.0'
dc_readhost=''
dc_relay_domains='*'
dc_minimaldns='false'
dc_relay_nets='0.0.0.0/0'
dc_smarthost='${DC_SMARTHOST:-}'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
EOF
# Set primary_hostname.
if [ "x$MAILNAME" != "x" ]; then
printf '%s\n' "$MAILNAME" > /etc/mailname
printf '%s\n' "MAIN_HARDCODE_PRIMARY_HOSTNAME=$MAILNAME" >> "$CONFDIR/update-exim4.conf.conf"
fi
# Apply exim configuration.
update-exim4.conf
exec "$@"