
mwader/postfix-relaypostfix-relay是一个Postfix SMTP中继Docker镜像,主要用于在不依赖外部SMTP服务器的情况下发送邮件。默认配置为开放中继,依赖Docker网络环境提供保护,因此需注意不要将其暴露到公网环境。
POSTFIX_<name>环境变量设置Postfix配置选项,支持自定义myhostname等关键参数POSTFIXMASTER_变量修改master.cf,双下划线__会自动替换为/POSTMAP_<filename>环境变量创建多行Postfix查找表OPENDKIM_<name>环境变量配置DKIM,自动生成RSA密钥对bashdocker pull mwader/postfix-relay
也可自行克隆源码构建镜像。
通过POSTFIX_<name>环境变量设置Postfix配置选项,例如:
POSTFIX_myhostname:设置FQDN(用于220/HELO响应),对应Postfix的myhostname参数使用POSTFIXMASTER_环境变量修改master.cf,双下划线__会替换为/。示例:
POSTFIXMASTER_submission__inet=submission inet n - y - - smtpd
会生成:
bashpostconf -Me submission/inet="submission inet n - y - - smtpd"
通过POSTMAP_<filename>环境变量创建多行查找表,格式如下:
yamlenvironment: - POSTFIX_transport_maps=hash:/etc/postfix/transport - | POSTMAP_transport=gmail.com smtp mydomain.com relay:[relay1.mydomain.com]:587 * relay:[relay2.mydomain.com]:587
这会生成文件/etc/postfix/transport并执行postmap /etc/postfix/transport。
通过OPENDKIM_<name>环境变量配置OpenDKIM,例如:
OPENDKIM_Canonicalization=relaxed/simple
默认配置可参考Dockerfile。
bashdocker run -e POSTFIX_myhostname=smtp.domain.tld mwader/postfix-relay
yamlversion: '3' services: app: # 使用"smtp"作为SMTP服务器主机名 smtp: image: mwader/postfix-relay restart: always environment: - POSTFIX_myhostname=smtp.domain.tld - OPENDKIM_DOMAINS=smtp.domain.tld
默认仅日志输出到stdout,可通过以下环境变量配置日志:
RSYSLOG_LOG_TO_FILE=yes:将mail.*日志写入文件(需挂载卷到/var/log/)RSYSLOG_TIMESTAMP=yes:日志添加时间戳yamlenvironment: - RSYSLOG_REMOTE_HOST=my.remote-syslog-server.com - RSYSLOG_REMOTE_PORT=514 - RSYSLOG_REMOTE_TEMPLATE=RSYSLOG_ForwardFormat
通过TZ环境变量设置时区,解决日志时间戳问题:
yamlenvironment: - TZ=Europe/Prague
部分Docker发行版(如Docker for Windows、RancherOS)的卷权限可能导致OpenDKIM密钥权限错误,解决方法:
yamlenvironment: - OPENDKIM_RequireSafeKeys=no
使用自建SMTP服务器发送邮件时,建议为发送域名配置SPF记录,提高邮件送达率。
通过OPENDKIM_DOMAINS环境变量指定域名(空格分隔),格式为<domain>或<domain>=<selector>(默认选择器为"mail")。
容器启动时会为每个域名生成RSA密钥对,除非/etc/opendkim/keys/<domain>/<selector>.private已存在。为持久化密钥,需挂载卷:
yamlvolumes: - ./opendkim-keys:/etc/opendkim/keys
DKIM DNS记录可通过容器日志查看,或执行以下命令获取:
bashdocker exec <container> sh -c 'cat /etc/opendkim/keys/*/*.txt'
示例输出:
mail._domainkey.smtp.domain.tld. IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Dx7wLGPFVaxVQ4TGym/eF89aQ8oMxS9v5BCc26Hij91t2Ci8Fl12DHNVqZoIPGm+9tTIoDVDFEFrlPhMOZl8i4jU9pcFjjaIISaV2+qTa8uV1j3MyByogG8pu4o5Ill7zaySYFsYB++cHJ9pjbFSC42dddCYMfuVgrBsLNrvEi3dLDMjJF5l92Uu8YeswFe26PuHX3Avr261n" "j5joTnYwat4387VEUyGUnZ0aZxCERi+ndXv2/wMJ0tizq+a9+EgqIb+7lkUc2XciQPNuTujM25GhrQBEKznvHyPA6fHsFheymOuB763QpkmnQQLCxyLygAY9mE/5RY+5Q6J9oDOQIDAQAB" ) ; ----- DKIM key mail for smtp.domain.tld
postfix-relay采用MIT许可证,详见LICENSE。




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务