You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现Docker应用容器通过Postfix SMTP中继容器发送邮件

无需SSH!让应用容器通过Postfix中继容器发邮件的正确姿势

其实你完全没必要用SSH来连接Postfix容器——Docker容器之间有原生、高效的通信机制,直接通过自定义网络就能实现应用容器调用Postfix的SMTP服务。下面是具体的实现步骤:

1. 创建专属Docker网络(关键!)

首先创建一个自定义Docker网络,这样两个容器之间可以通过容器名称直接解析通信(默认桥接网络可能存在DNS解析问题):

docker network create mail-relay-network

2. 配置并启动Postfix中继容器

你需要确保Postfix容器允许来自应用容器的中继请求,同时把它加入刚才创建的网络。这里推荐使用现成的boky/postfix镜像(配置简单,适合快速搭建中继):

docker run -d \
  --name postfix-relay \
  --network mail-relay-network \
  -e MYHOSTNAME=mail.yourdomain.com \ # 设置你的邮件服务器域名
  -e MYNETWORKS=172.18.0.0/16 \ # 这里填自定义网络的子网(可通过`docker network inspect mail-relay-network`查看),允许该子网内的容器中继
  -e RELAYHOST= \ # 如果需要转发到外部SMTP服务(比如Gmail),这里填`smtp.gmail.com:587`,不需要则留空
  boky/postfix

如果是自定义Postfix镜像,记得修改main.cf配置文件,确保:

  • inet_interfaces = all:允许外部容器连接Postfix的25端口
  • mynetworks = 应用容器IP/32 或者你的自定义子网:明确允许应用容器的IP进行邮件中继

3. 启动应用容器并加入同一网络

启动你的应用容器时,指定加入刚才创建的mail-relay-network

docker run -d \
  --name my-app-container \
  --network mail-relay-network \
  # 这里填你的应用镜像和其他启动参数
  your-app-image:latest

4. 在应用容器的脚本中调用Postfix中继发邮件

现在你的应用容器可以直接通过Postfix容器的名称postfix-relay(或者它的IP)作为SMTP服务器来发邮件了。举几个常见的脚本例子:

mail命令发送

# 发送简单文本邮件
echo "这是邮件的正文内容" | mail \
  -s "测试邮件主题" \
  -r "sender@yourdomain.com" \ # 发件人地址
  recipient@example.com \ # 收件人地址
  -S smtp=postfix-relay:25 # 指定SMTP服务器为Postfix容器

sendmail命令发送

sendmail -S postfix-relay:25 recipient@example.com <<EOF
From: sender@yourdomain.com
To: recipient@example.com
Subject: 测试邮件

这是邮件的正文内容,支持多行文本
EOF

排查问题小技巧

如果发邮件失败,可以按以下步骤排查:

  • 在应用容器里ping postfix-relay,看是否能解析到IP(验证网络连通性)
  • telnet postfix-relay 25测试25端口是否能正常连接
  • 查看Postfix容器的日志:docker logs postfix-relay,看是否有中继被拒绝的错误信息(比如mynetworks配置不正确)

内容的提问来源于stack exchange,提问作者Aurelien

火山引擎 最新活动