问题标签 [aiosmtpd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
114 浏览

python - 带有 Docker 的 Python Aiosmtpd 服务器 - 连接被拒绝

我正在尝试开发一个应该在 docker 容器中运行的测试电子邮件服务器。docker 容器使用 --network=host -P 运行;虽然对于单元测试我想使用--network=none。

我特意指定应该使用端口 0(让操作系统选择一个可用端口)。然后我有一个函数来获取实际使用的端口。服务器代码是

我不断收到连接被拒绝:

如果我使用没有拒绝连接的 s.bind(('0.0.0.0', 0)) 创建一个简单的服务器套接字。

(我的主机和容器都是 Ubuntu 20.04,python 3.8.5,容器从源代码安装了 aiosmtpd 1.4.2)。

有人可以帮忙吗?

0 投票
0 回答
79 浏览

aiosmtpd - 接收电子邮件时通过 aiosmtpd 断开连接

我正在使用 python3、aiosmtpd 从私有局域网上的 dvr 捕获电子邮件并剥离附件。我已经为 aiosmtp 和一些测试 python 编写了一个处理程序来发送一封带有附件、纯文本、没有加密的电子邮件,并且它可以工作。当 dvr 发送电子邮件时,它会导致连接丢失。

我尝试使用以下方法进行调试:

添加“--no-requiretls”似乎不会改变结果。

  1. 项目清单

这是结果:

smtp.py,由 pip3 安装的 aiosmtpd 1.4.2 的一部分:

因此,如果收到 AUTH,上述默认值将失败,因为 init,如果未由用户代码设置,则将 _auth_require_tls 保留为 True。由于在这种情况下 AUTH 很简单,因此协议不会是 tls。

再调试一下,我发现客户端没有响应挑战。

不知道现在该尝试什么。有什么建议么?

0 投票
1 回答
118 浏览

python - 带有自定义控制器和 SMTP 工厂的 aiosmtpd 怪异

首先,我正在使用aiosmtpd,并且正在尝试编写一个围绕它的类,以使用 StartTLS 以编程方式启动 SMTP 服务器。现在,直到最近,此代码与您可能传递给它的任何处理程序都按预期工作,例如我编写的用于调整消息参数等的基本消息处理程序,并将其作为消息头的一部分传递。

这驻留在custom_handlers.py其中,然后通过 Python 控制台在测试中调用,如下所示:

当我想停止测试服务器时,我会简单地做一个server.stop()但是在处理任何消息期间,我们会被这个邪恶的错误阻止:

现在,我可以使用传入 SMTP 工厂的任何处理程序来复制它。

但是,我无法使用带有调试处理程序的普通 aiosmtpd 来复制它,就像文档中定义的那样:

...效果很好。将调试处理程序传递到 StartTLSServer 会导致与自定义 MessageHandler 类相同的错误,即使使用调试处理程序也是如此。

我是否遗漏了一些关于我的课程的明显内容,这些课程在这里以一种不同于 aiosmtpd 预期的编程用法的方式爆炸?

0 投票
0 回答
129 浏览

python - Python aiosmtpd 提供服务器不支持的 SMTP AUTH 扩展

我正在尝试在我的 PC 上设置一个需要身份验证的 SMTP 服务器(就像 gmail 一样)。尝试从客户端发送电子邮件 - “服务器不支持 SMTP AUTH 扩展”。我从python aiosmtpd 服务器获得了基本身份验证https://github.com/aio-libs/aiosmtpd/blob/master/examples/authenticated_relayer/server.py的帮助。

服务器代码 -

客户代码 -

在客户端代码中使用这个 smtplib.SMTP_SSL('smtp.gmail.com',465) 我能够通过 gmail 发送电子邮件。

还尝试评论只是为了调试

0 投票
1 回答
99 浏览

python-3.x - 具有基本日志记录的 python aiosmtpd 服务器

我已经知道 aiosmtpd 会记录到系统日志中。我使用的是 Red Hat Linux 发行版,在消息或邮件日志文件中找不到与我的 SMTP 服务器相关的任何内容。我正在尝试调试无法通过基本身份验证连接到我的 SMTP 服务器的设备的问题,因为我找不到该设备被我的服务器拒绝的任何原因。到目前为止,我能够调试的唯一方法是使用 EHLO 和 MAIL 处理程序,并在达到连接的该阶段时打印一条消息。理想情况下,我希望尽可能多地注销,就像使用 smtplib 一样,它使您能够查看客户端和服务器之间的每条消息。是否可以这样做或至少进行一些基本的日志记录,如果可以,我该怎么做?我正在使用的代码是:

0 投票
0 回答
27 浏览

python-3.x - 如何为 aiosmtpd 编写自己的 challenge_auth 方法?

我正在尝试将野生动物摄像机连接到我的 SMTP 服务器,但在被要求输入用户名后,它一直断开连接。我已经验证该服务器可以与其他野生动物相机和电子邮件客户端一起使用,但对于这种特定型号的野生动物相机似乎总是失败。我尝试过不使用身份验证、基本身份验证和 TLS,但它们都不起作用(尽管相机可与 gmail SMTP 一起使用)。

在此处输入图像描述

这是我正在使用的简单代码。

看来我需要修改 challenge_auth 方法。我的问题是我该怎么做,我是否只是在带有 handle_DATA 的自定义处理程序中添加另一个方法?

这是可以成功连接的 reolink go 相机的日志。(我已经通过编辑库更新了“用户名”的格式,例如从“用户名:”到“用户名”,但这似乎对 suntek 相机没有帮助。我认为它可能更适合格式由于更便宜,不太健壮的固件。

在此处输入图像描述

0 投票
1 回答
63 浏览

smtp - SMTP STARTTLS 格式

建立 TLS 连接后是否需要 EHLO 消息?我正在使用 acorn ltl-6511M 野生动物相机,它在建立 TLS 连接后似乎没有发送 EHLO 消息,导致我的基于 aiosmtpd 的 SMTP 服务器出现 503 错误。但它适用于 gmail SMTP。是相机遵循协议还是我的服务器不够健壮?

在此处输入图像描述

我正在使用的代码是:

尝试整合后的代码是:

但是,这对错误日志没有任何影响。

0 投票
2 回答
63 浏览

python - 无法从 python aiosmtpd SMTP 服务器发送或接收电子邮件,卡在 250 ok

我已经“成功”建立了一个 SMTP 服务器。该代码可以正常连接到 SMTP 客户端。但是它既不能接收电子邮件也不能发送它。我尝试了各种测试服务器以及标准 gmail/yahoo 等。这是代码:

您可以测试服务器的可达性。我被卡住了,花了整整 2 天无济于事。问题绝对不是连通性,我把 25 端口打开了。确保godaddy也没有外部问题。任何帮助将不胜感激。

编辑:1 Wire Shark 数据的快速峰值显示,当我运行客户端脚本时,绝对没有数据包被传输到外部。这是我用于测试的 clinet 脚本。

0 投票
2 回答
46 浏览

email - 如何在 localhost 上设置最小的 smtp 服务器以将消息发送到其他 smtp 服务器

老实说,我认为我在理解 SMTP 的工作原理方面存在根本性的差距。我似乎无法很好地解释幕后发生的事情,我认为这使我无法做我想做的事情。

为了解释,我正在尝试设置一个通过连接到 SMTP 服务器向用户发送通知的应用程序。很公平。我想,由于我使用自己的域,我配置了 SPF/DKIM/DMARC,我可以为我设置应用程序的主机添加 MX 记录(我的 SPF 记录具有mx授权我 MX 中的任何主机的关键字记录发送/接收邮件)。然后,我可以让同一台主机运行一个超级轻量级​​的 SMTP 服务器,它可以接受来自应用程序的邮件,并将它们发送给收件人。

几乎至关重要的是,我希望这个服务器基本上只在 localhost 上运行,这样只有这个应用程序可以连接并通过它发送邮件,但它不能真正“接收”发送到我的域的邮件(我已经将 MX 优先级设置为此应用服务器的低(嗯,高数字))。我想,因为我正在运行自己的 SMTP 服务器,所以我不需要对其进行身份验证(它在 localhost 上运行),只需接收任何邮件并将其发送到收件人域即可。

发送到收件人域时... SMTP 服务器是否需要进行身份验证才能说 gmail SMTP 服务器作为用户才能在那里发送邮件?这看起来很奇怪,因为它不是用户登录 gmail 来发送邮件,它是 SPF 授权的 SMTP 服务器,它从我的域(我的域中From的地址)发送邮件到应用服务器用户的电子邮件所在的位置(在在此示例中,用户将是例如some_user@gmail.com)。

我尝试使用 python 的命令行和 telnet 从toaiosmtpd发送邮件,但它似乎没有传递消息;我想将连接到我的域的首选 MX 服务器(我的“真实”MX)以传输消息,然后将其放入我的收件箱。情况似乎并非如此,我不知道为什么。test@MY_DOMAIN.TLDtest@MY_DOMAIN.TLDaiosmtpd

精确的复制步骤,example.com我的域在哪里,终端在我的 MX 记录中列出的主机名的盒子上运行。

A航站楼:

B航站楼:

SMTP 服务器通常如何在彼此之间发送邮件?他们每个人都可以登录到彼此的 SMTP 服务器进行身份验证吗?既然我没有这样做,这是个问题吗?我可以在 localhost 上运行 SMTP 服务器并让它从网络发送邮件而不接收邮件(无回复服务)吗?有什么明显的东西我只是在这里想念可以解决我所有的问题吗?

谢谢