【问题标题】:Django send mail from docker container how to expose portDjango从docker容器发送邮件如何公开端口
【发布时间】:2021-04-06 05:11:13
【问题描述】:

没有 docker 容器,邮件发送工作正常。我想我实际上打开了 SMTP 端口。这是我的 docker-compose 文件:

version: "3.9"

services:
  db:
    <some postgres setup>
  api:
    build: .
    command: python manage.py runserver 0.0.0.0:8000 --settings=api.settings.production
    volumes:
      - .:/code
    ports:
      - "8000:8000"
      - "587:587"
      - "25:25"
    expose:
      - 587
      - 25
    env_file:
      - ./.env.dev
    depends_on:
      - db
    entrypoint: /entrypoint.sh
  mail:
    build: .
    command: python manage.py qcluster --settings=api.settings.production
    depends_on:
      - api

无论我是使用 django q 将邮件作为异步任务发送还是直接使用 django.core.mail.send_mail 发送,都无法发送邮件

这是我的邮件设置.py:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'mail'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

我收到一个 OSError OSError: [Errno 99] Cannot assign requested address

【问题讨论】:

  • 您只需要ports: 即可接受入站连接——如果您通过 SMTP接收消息。除了您在此处显示的设置之外,您能否提供 minimal reproducible example 并提供足够的代码来实际演示该问题?
  • 我不需要接收消息,所以我不需要ports下的587和25?提供代码示例并不容易,但我基本上只是从 django.core.mail 调用 send_mail 方法
  • 是的,ports 中不需要 25 和 587。这仅用于端口转发。尝试删除这些,这可能是您解决此问题所需要做的一切。
  • 不幸的是,删除端口后我得到了同样的错误
  • 仔细检查您是否需要在您的 gmail 帐户中为该电子邮件地址禁用两步验证。或将其添加为应用程序:在此处查看 myaccount.google.com/security?pli=1 并进入应用程序密码

标签: python django docker email django-q


【解决方案1】:

问题是端口被我的 wifi 阻塞了。

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-12-03
    • 2023-03-12
    相关资源
    最近更新 更多