Symfony 邮件捕获器(mailpit)拒绝从代码连接,从控制台工作

问题描述 投票:0回答:1

我正在尝试设置一个在 Docker 中运行的 Symfony 的开发环境。最近我安装了 symfony/mailer 软件包,并可以选择安装 mailcatcher,结果是 axllent/mailpit。

但是,当我的代码尝试发送电子邮件时(我只是尝试使用 symfony 生成的注册表单和用户电子邮件验证),我收到以下错误:

    Connection could not be established with host "127.0.0.1:1025": stream_socket_client(): Unable to connect to 127.0.0.1:1025 (Connection refused)

但是,如果我在控制台中尝试使用

    symfony console mailer:test [email protected]

    mailpit sendmail -t -S 127.0.0.1:1025 < email.txt

一切正常,电子邮件出现在 mailpit Web UI 中(我可以在 localhost:8025 上正常访问)。

这是我的 compose.yaml 的 mailpit 部分:

    mailer:
      image: axllent/mailpit
      restart: unless-stopped
      volumes:
        - ./mailer:/data
      ports:
        - 1025:1025
        - 8025:8025
      environment:
        MP_SMTP_AUTH_ACCEPT_ANY: 1
        MP_SMTP_AUTH_ALLOW_INSECURE: 1
        MP_MAX_MESSAGES: 5000
        MP_DATABASE: /data/mailpit.db

在 .env 中,我有以下 DSN:

    MAILER_DSN=smtp://127.0.0.1:1025

如何使代码也正确连接/发送电子邮件?

如果有相关的话,这里是完整的堆栈跟踪:

php symfony symfony-mailer mailcatcher
1个回答
0
投票

您需要在运行 Symfony 的容器内使用 Docker 服务名称 (

mailer
) 作为主机名,而不是本地主机 (
127.0.0.1
)。 将其放入您的
.env.dev
.env.dev.local
:

    MAILER_DSN=smtp://mailer:1025

然后使用

mailer
检查
docker compose ps
服务暴露了哪些端口。它应该返回类似这样的内容:

NAME                 ... PORTS
my-project-mailer-1  ... 1110/tcp, 0.0.0.0:35433->1025/tcp, 0.0.0.0:44957->8025/tcp

注意

0.0.0.0:44957->8025
。在这种情况下,可在
mailer
访问
http://localhost:44957
服务的 Web 界面。

或者在 Docker 组合中使用固定端口,使 Web 界面仅在本地计算机上在端口 48025

 (
http://localhost:48025
) 上可用。

mailer: image: axllent/mailpit # ... ports: - "1025:1025" - "127.0.0.1:48025:8025" # ...
    
© www.soinside.com 2019 - 2024. All rights reserved.