我有一个在 ECS 中运行的 postfix 容器,我已将其配置为使用端口 2525,因为我读到端口 25 可能会被阻止。
当我尝试使用 nodemailer 从节点应用程序建立到它的连接(直接到从 AWS 控制台中任务的网络选项卡获取的任务专用 IP)时,我收到错误
Greeting never received
。 postfix 容器中没有记录任何内容。
但是,如果我卷曲 IP 和端口 2525,postfix 会记录
warning: non-SMTP command from localhost[127.0.0.1]: GET / HTTP/1.1
。这个警告是有道理的,证明端口是开放的并且正在接收呼叫。
如果我使用 telnet 它会连接,但如果我发出标准 SMTP
HELO
命令,我会得到:
HELO [email protected]
HTTP/1.1 400 Bad Request
content-length: 11
content-type: text/plain
date: Wed, 08 May 2024 16:40:25 GMT
server: envoy
connection: close
可能发生什么事?就像 ECS 强制流量应为 TCP 时使用 HTTP 一样?本地运行的完全相同的容器和配置工作正常,并且
HELO
返回预期的响应。
容器正在fargate中运行
该问题是由任务定义中的
appProtocol
块中的 portMappings
设置引起的:
portMappings = [
{
"name" : "postfix",
"containerPort" : 2525,
"hostPort" : 2525,
"protocol" : "tcp",
"appProtocol" : "http"
}
]
删除
appProtocol
即可建立 SMTP 连接。