从 docker 容器向 MX 服务器发出请求

发布于 2025-01-18 19:06:54 字数 3468 浏览 2 评论 0原文

上下文

我们的解决方案发送电子邮件活动,一些电子邮件提供商制作了临时黑名单,因为我们使用了不存在的电子邮件地址(它们可能由任何用户创建/导入)

解决方案

我尝试实施基于 https://www.codexworld.com/verify-email-address-check-if-real-exists-domain-php/

问题

从我的本地计算机,此脚本有效(当我的 IP 没有被临时列入黑名单时),但从我的 Docker 容器 stream_socket_client 甚至 telnet 总是超时。

正如我所看到的,MX 服务器总是使未经验证的请求者超时,但如何才能使其在我的 docker 容器中工作? 我没有端口 25 的具体 docker 配置。

谢谢

docker-compose.yml

# Base docker-compose file to run required services: Adminer, MySQL, and Redis
version: '3.7'

services:

  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"

  database:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    cap_add: [ SYS_NICE ] # https://github.com/docker-library/mysql/issues/303
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci', '--lower_case_table_names=1']

  redis:
    image: redis:alpine
    expose:
      - "6379"

  redisinsight:
    image: redislabs/redisinsight
    ports:
      - "8081:8001"

  reverse-proxy:
    image: nginx:alpine
    depends_on:
      - backend
      - frontend
    volumes:
        - ./../../../backend/infra/etc/nginx/dev.conf:/etc/nginx/nginx.conf
    ports:
        - "80:80"

  backend:
    build:
      context: ./../..
      dockerfile: container/dev/backend.dockerfile
    expose:
      - "80"
    volumes:
      - {...}
    depends_on:
      - database

  frontend:
    build:
      context: ./../..
      dockerfile: container/dev/frontend.dockerfile
    expose:
      - "3000"
    volumes:
      - {...}
    tty: true # required to keep yarn running (https://stackoverflow.com/a/61050994)

volumes:
  # Contains the database's data
  db_data: {}
# Base docker-compose file to run required services: Adminer, MySQL, and Redis
version: '3.7'

services:

  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"

  database:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    cap_add: [ SYS_NICE ] # https://github.com/docker-library/mysql/issues/303
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci', '--lower_case_table_names=1']

  redis:
    image: redis:alpine
    expose:
      - "6379"

  redisinsight:
    image: redislabs/redisinsight
    ports:
      - "8081:8001"

  reverse-proxy:
    image: nginx:alpine
    depends_on:
      - backend
      - frontend
    volumes:
        - ./../../../backend/infra/etc/nginx/dev.conf:/etc/nginx/nginx.conf
    ports:
        - "80:80"

  backend:
    build:
      context: ./../..
      dockerfile: container/dev/backend.dockerfile
    expose:
      - "80"
    volumes:
      - {...}
    depends_on:
      - database

  frontend:
    build:
      context: ./../..
      dockerfile: container/dev/frontend.dockerfile
    expose:
      - "3000"
    volumes:
      - {...}
    tty: true # required to keep yarn running (https://stackoverflow.com/a/61050994)

volumes:
  # Contains the database's data
  db_data: {}

backend.dockerfile 是一个带有 git、mysql-client、php 的 ubuntu

Context

Our solution send emailing campaign, and some email provider makes temporary blacklist because we used inexistant email addresses (they may be created/imported by any user)

Solution

I try to implement a email checker based on https://www.codexworld.com/verify-email-address-check-if-real-exists-domain-php/

Problem

From my local computer, this script works (when my IP is not temporary blacklisted) but from my Docker Container stream_socket_client or even telnet always times out.

As I see, MX servers always time out non verified requester but how can I make it work from my docker container?
I've no specific docker configuration for the port 25.

Thank you

docker-compose.yml

# Base docker-compose file to run required services: Adminer, MySQL, and Redis
version: '3.7'

services:

  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"

  database:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    cap_add: [ SYS_NICE ] # https://github.com/docker-library/mysql/issues/303
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci', '--lower_case_table_names=1']

  redis:
    image: redis:alpine
    expose:
      - "6379"

  redisinsight:
    image: redislabs/redisinsight
    ports:
      - "8081:8001"

  reverse-proxy:
    image: nginx:alpine
    depends_on:
      - backend
      - frontend
    volumes:
        - ./../../../backend/infra/etc/nginx/dev.conf:/etc/nginx/nginx.conf
    ports:
        - "80:80"

  backend:
    build:
      context: ./../..
      dockerfile: container/dev/backend.dockerfile
    expose:
      - "80"
    volumes:
      - {...}
    depends_on:
      - database

  frontend:
    build:
      context: ./../..
      dockerfile: container/dev/frontend.dockerfile
    expose:
      - "3000"
    volumes:
      - {...}
    tty: true # required to keep yarn running (https://stackoverflow.com/a/61050994)

volumes:
  # Contains the database's data
  db_data: {}
# Base docker-compose file to run required services: Adminer, MySQL, and Redis
version: '3.7'

services:

  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"

  database:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    cap_add: [ SYS_NICE ] # https://github.com/docker-library/mysql/issues/303
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci', '--lower_case_table_names=1']

  redis:
    image: redis:alpine
    expose:
      - "6379"

  redisinsight:
    image: redislabs/redisinsight
    ports:
      - "8081:8001"

  reverse-proxy:
    image: nginx:alpine
    depends_on:
      - backend
      - frontend
    volumes:
        - ./../../../backend/infra/etc/nginx/dev.conf:/etc/nginx/nginx.conf
    ports:
        - "80:80"

  backend:
    build:
      context: ./../..
      dockerfile: container/dev/backend.dockerfile
    expose:
      - "80"
    volumes:
      - {...}
    depends_on:
      - database

  frontend:
    build:
      context: ./../..
      dockerfile: container/dev/frontend.dockerfile
    expose:
      - "3000"
    volumes:
      - {...}
    tty: true # required to keep yarn running (https://stackoverflow.com/a/61050994)

volumes:
  # Contains the database's data
  db_data: {}

backend.dockerfile is an ubuntu with git, mysql-client, php

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文