#!/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