blob: 45798fe9ebd7f8b5dc9517cea479b1a51d0317b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#!/usr/bin/env bash
set -e
KEY_FILE=/etc/opendkim/keys/mail.private
# Wait for DKIM key (mounted read-only from host)
for i in $(seq 1 30); do
[[ -f "$KEY_FILE" ]] && break
echo "Waiting for DKIM key at $KEY_FILE ... (run mail/install.sh on host)"
sleep 2
done
if [[ ! -f "$KEY_FILE" ]]; then
echo "ERROR: DKIM key not found at $KEY_FILE" >&2
exit 1
fi
# Docker の embedded DNS (127.0.0.11) は MX クエリを正しく処理できないことがあるため
# 外部 DNS に差し替える(sed -i は bind mount で失敗するため cat 経由で上書き)
grep -v 'nameserver 127.0.0.11' /etc/resolv.conf > /tmp/resolv.new
printf 'nameserver 8.8.8.8\nnameserver 1.1.1.1\n' >> /tmp/resolv.new
cat /tmp/resolv.new > /etc/resolv.conf
# Start rsyslog for Postfix logging
rsyslogd
# Start OpenDKIM (runs as root per opendkim.conf UserID)
opendkim -x /etc/opendkim.conf
sleep 2
# Postfix の smtp プロセスは chroot で動くため /var/spool/postfix/etc/ に
# resolv.conf 等を配置しないと DNS 名前解決ができない
mkdir -p /var/spool/postfix/etc
cat /etc/resolv.conf > /var/spool/postfix/etc/resolv.conf
cp -f /etc/hosts /var/spool/postfix/etc/hosts 2>/dev/null || true
cp -f /etc/services /var/spool/postfix/etc/services 2>/dev/null || true
cp -f /etc/nsswitch.conf /var/spool/postfix/etc/nsswitch.conf 2>/dev/null || true
# Create sasl_passwd for SES relay from environment variables
if [[ -n "${SES_ACCESS_KEY_ID:-}" && -n "${SES_SMTP_PASSWORD:-}" ]]; then
echo "[email-smtp.us-east-1.amazonaws.com]:587 ${SES_ACCESS_KEY_ID}:${SES_SMTP_PASSWORD}" > /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
fi
# Start Postfix
postfix start
# Keep container alive, forward mail log to stdout
touch /var/log/mail.log
exec tail -f /var/log/mail.log
|