来自牧场主容器中的python客户端的smtp超时

Luc*_*s03 8 smtplib mailgun docker rancher

我有一个奇怪的问题,没有想法可能是错的,所以也许在这里写它可以帮助我提出想法.或者有人可以帮助我:)

我有一个在牧场主运行的Django网站,过去几周我发现电子邮件无效.超时错误被提出.我使用mailgun.org作为SMTP服务器.

这是从牧场主容器控制台输出的:

/app/app # ipython
Python 2.7.14 (default, Dec 19 2017, 22:36:09)
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from smtplib import SMTP

In [2]: smtp = SMTP(host='smtp.mailgun.org', port=587)
Run Code Online (Sandbox Code Playgroud)

它只是挂起.添加超时当然会引发超时.

我猜想mailgun有问题.但是在本地运行相同图像上的相同代码(commit-hash匹配rancher容器上的代码).

docker run -ti registry.gitlab.com/namespace/app:commit-hash /bin/sh
/app/app # ipython
Python 2.7.14 (default, Dec 19 2017, 22:36:09)
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from smtplib import SMTP

In [2]: smtp = SMTP(host='smtp.mailgun.org', port=587)

In [3]:
Run Code Online (Sandbox Code Playgroud)

我不知道它是如何工作的.如果他们阻止我的服务器的IP地址,我联系了mailgun支持.他们的回答:

我们没有阻止生产IP.一个环境可以工作而不是另一个环境的唯一方式是两个环境的某些方面不同,因此我们建议您查看侧面的配置.

如果我使用相同的泊坞窗图像会有什么不同?我改变环境的唯一方法是env变量,但它们都不与python/system相关.

我认为错误是由我使用gevent,但我昨天删除了它.


请在docker console中尝试"telnet smtp.mailgun.org 587"

/app/app # telnet smtp.mailgun.org 587
telnet: can't connect to remote host (52.10.40.100): Operation timed out
/app/app #
Run Code Online (Sandbox Code Playgroud)

Dockerfile的第一行:

FROM python:2.7-alpine

ENV PYTHONUNBUFFERED 1

# Install dependencies
RUN apk update && \
    apk add --no-cache build-base \
        curl \
        nano \
        postgresql-dev \
        vim
Run Code Online (Sandbox Code Playgroud)

来自主机的telnet:

~# telnet smtp.mailgun.org 587
Trying 34.232.180.42...
Trying 54.164.235.211...
Trying 34.237.7.101...
telnet: Unable to connect to remote host: Connection timed out
Run Code Online (Sandbox Code Playgroud)

Luc*_*s03 5

你好,

为了对您取消阻止服务器端口 25 的请求做出积极响应,需要进行额外的验证。...

看起来提供商 (Scaleway.com) 阻止了该端口。

当我使用外部服务发送电子邮件时,我不知道托管公司会这样做。无论如何,验证我的帐户,禁用阻止,硬重启服务器并且它可以工作。

感谢大家的意见/帮助!