问题标签 [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 回答
2712 浏览

python - Python 3 SMTP aiosmtpd 代理/中继

我正在尝试使用aiosmtpd替换smtpd. 下面的程序实例化了一个Proxy传递给邮件控制器的处理程序,该处理程序随后在后台启动。smtplib然后使用连接到中继的标准客户端创建消息。

一切都很好,直到客户端和中继之间的 SMTP 对话以消息永不离开中继结束。中继从不回复 a250 OK\r\n和 actrl+c表示sendmail正在等待回复。

有任何想法吗?脚本是否缺少某些内容?

编辑mail.example.com只是一个示例服务器。使用smtpd DebuggingServer执行脚本时,不会打印任何内容relay = aiosmtpd.handlers.Proxy("localhost", 1025)

脚本:

这是脚本的输出:

为了比较,这里是使用调试处理程序的输出:

0 投票
1 回答
172 浏览

python - aiosmtpd.handlers.Proxy.handle_DATA 中的字节/字符串不匹配

我是 asyncio / aiosmtpd 的新手。我使用这个错误,还是这是一个错误?

运行下面的代码,我收到一个错误,表明我们将字节与字符串混淆了。我在带有 aiosmtpd 1.0a5 的 Linux 上使用 Python 3.6.1 运行它。

我得到了这个回溯。

如果我在 aiosmtpd/handlers.py 中的 Proxy 类中更改它:

对此

它似乎有效,但我对信封、邮件协议、编码等知之甚少,不知道这是否是一个适当的修复,或者即使我正在使用图书馆。在我看来,这个处理程序永远无法工作,我认为有一些测试......

0 投票
1 回答
2895 浏览

python - 基本 aiosmtpd SMTP 服务器示例

如何将以下使用的基本 SMTP 服务器转换为使用smtpd的服务器aiosmtpd

0 投票
1 回答
2652 浏览

python - aiosmtpd - python smtp 服务器

我正在尝试使用 python 和aiosmtpd库在我的计算机上运行我自己的 stmp 服务器。
我运行了这个例子,一切看起来都很好,但我从来没有收到另一端的电子邮件。
我不知道是否有我可以看到的日志。
我正在使用 Visual Studio 2015、python 3.5 和 windows 8.1

我看到了一个类似的帖子,但它没有帮助。

重要说明:
在客户端代码中,我也尝试不使用 Date 标头

服务器.py:

客户端.py:

更新
我在 Client.py 设置了 s.set_debuglevel(True) 并收到了这个输出:

0 投票
2 回答
1544 浏览

python - 如何使用 aiosmtpd 正确支持 STARTTLS?

我几乎直接从 aiosmtpd 文档中获取了以下服务器:

但是,当我启动此服务器并尝试使用 swaks 向它发送电子邮件时:

30 秒后超时。如果我ssl_context=context从服务器和-tls客户端中删除它,那么它会很好地发送邮件。

此外,当我尝试通过 telnet 连接并发送EHLO whatever时,服务器实际上会关闭连接。

实现支持 tls 的 aiosmtpd 服务器的正确方法是什么?

0 投票
3 回答
1944 浏览

python - Python aiosmtpd - 邮件传输代理 (MTA) 缺少什么?

我想用aiosmtpd在 python 中编写我自己的小型邮件服务器应用程序

a) 出于教育目的,以更好地了解邮件服务器
b) 实现我自己的功能

所以我的问题是,Mail-Transfer-Agent缺少什么(除了 aiosmtpd) ,它可以向/从其他完整的 MTA(gmail.com、yahoo.com ...)发送和接收电子邮件?

我正在猜测:

1.) 当然是和静态 ip
2.)此域的有效证书
...应该可以使用 Lets Encrypt
3.)加密
...应该可以使用 SSL/Context/Starttls ... 使用 aiosmtpd 本身
4 .)解析外发电子邮件的 MX DNS 条目!?
...应该可以使用 python 库 dnspython
5。) SMTP 通信错误的错误处理、来自其他 MTA 的错误回复、弹跳!?
6.)处理入站和待处理出站电子邮件的 队列!?

是否缺少任何其他“基本”功能?

我当然知道,邮件服务器还有很多“高级”功能,例如垃圾邮件检查、恶意软件检查、证书验证、黑名单、规则、邮箱等等……

感谢所有提示!


编辑:

让我澄清一下我的想法:
我想为一个俱乐部写一个邮件服务器。它的主要目的是一个邮件列表服务器。俱乐部的不同团体会有不同的名单。假设我的域是myclub.org,那么例如会有 Youth@myclub.orgtrainer@myclub.org等等。
只有会员才能使用此邮件服务器,并且只有会员才能收到来自此邮件服务器的电子邮件。不允许其他人向此邮件服务器发送电子邮件,也不会收到来自它的电子邮件。成员电子邮件地址及其组存储在数据库中。

将来我想集成一些其他有用的功能,例如:

  • 自动提醒
  • 聊天机器人,成员可以在其中控制服务并通过电子邮件请求信息

我不需要什么:

  • 用户邮箱
  • POP/IMAP 访问
  • 网页界面

打开中继问题

  • 我想在 SMTP 协商期间拒绝任何不在成员数据库中的 [FROM] 电子邮件地址。
  • 我想检查发送邮件服务器的有效证书。
  • 电子邮件/会员/天的数量将受到限制。
  • 我不确定,如果我真的需要对收到的电子邮件进行垃圾邮件检测?

丢失电子邮件问题

我想我需要一个“轻量级”的重试机制。但是,如果在重试后无法发送外发电子邮件,它将被丢弃,并且只会通知管理员,而不是发件人。成员不应被电子邮件传递问题所困扰。是否有任何Python 库可以生成符合 RFC3464 的错误回复电子邮件?

重启问题

我不确定我是否真的需要永久存储尚未发送的电子邮件?在我的用例中,所有外发电子邮件通常应在几秒钟内送达(如果没有出现送达问题)。在(计划的)重启之前,我可以检查一个空的发送队列。

0 投票
2 回答
1243 浏览

python - 在 aiosmtpd 中解析和解码邮件文本,执行字符串替换,并重新注入

我从smtpd开始,以便处理邮件队列、解析入站电子邮件并将它们发送回收件人(使用smtpdlib.sendmail)。我切换到aiosmtpd因为我需要多线程处理(而smtpd是单线程的,而且看起来已经停产了)。

顺便说一句,我对邮件信封内容的aiosmtpd管理感到困惑,这似乎比以前更加精细,如果您需要真正微调,那就太好了,但如果您只想处理正文而不修改其余部分,那就有点过大了。

举个例子,smtpd process_message方法只需要data_decode=True参数来处理和解码邮件正文而不接触任何东西,而 aiosmtpd HANDLE_data方法似乎无法自动解码邮件信封,并且经常出现嵌入图像、附件等的异常。 .

编辑添加了代码示例,首先是 smtpd:以下代码将实例化 smtp 服务器,等待端口 10025 上的邮件并通过 smtplib(都是本地主机)传递到 10027。为所有类型的邮件(基于文本/html,带有嵌入的图像、附件......)处理数据变量(基本上执行字符串替换,我的目标)是安全的

以前的代码运行良好,但采用单线程方式(= 一次 1 封邮件),所以我切换到 aiosmtpd 以进行并发邮件处理。与 aiosmtpd 相同的示例大致如下:

此代码适用于文本电子邮件,但在使用任何复杂邮件(mime 内容、附件...)解码信封内容时会出现异常

如何在 aiosmtpd 中解析和解码邮件文本,像使用 smtpd 一样执行字符串替换,然后通过 smtplib 重新注入?

0 投票
1 回答
162 浏览

python-3.x - 从 Java Camel 应用程序连接到 Python 邮件服务器的问题

我有一个使用 Python 语言aiosmtpd包 ( https://github.com/aio-libs/aiosmtpd ) 实现的简单电子邮件服务器。我还有一个 Apache Camel 应用程序,其路由尝试从服务器获取邮件。

我已经能够成功地将邮件发送到服务器,并且它正在保存到一个目录中。但是,我在尝试从服务器获取邮件时遇到了问题。来自 Camel 应用程序的错误消息是:

邮件服务器不显示任何可见消息。我不知道它是否维护某种日志。发送邮件时,服务器会显示很多关于它从发件人那里收到的消息的信息,所以它肯定是在显示一些信息。

我不知道用户名应该是什么。另外,用户是否需要密码?我在网站上找不到aiosmtpd涉及用户或密码的信息。

是否期望邮件服务器具有一组已识别/授权的用户并且我需要指定其中一个?有不需要用户/密码这样的事情吗?

以下是骆驼路线供参考:

这是邮件服务器 python 脚本:

服务器.py:

0 投票
1 回答
372 浏览

python - 具有基本身份验证的 python aiosmtpd 服务器

我正在尝试创建一个 aiosmtpd 服务器来处理收到的电子邮件。它在没有身份验证的情况下工作得很好,但我根本不知道如何设置身份验证。我浏览了这些文件并搜索了这方面的示例。

我当前如何使用它的示例:

0 投票
1 回答
81 浏览

python - 子线程不能更新父线程变量?

我在aiosmtpd/244中发现了一个非常令人困惑的问题,在这里分享我的困惑,以帮助我找到如何解决问题的灵感。

情况

  • 两台运行 Red Hat 7.9 的服务器
  • 对一个有效,对另一个无效
  • 有问题的代码,简化:

只有在方法结束时仍然为 Nonestart()self.smtpd时,才能生成上述 RuntimeError 。

预期流量

start()-> _run()->loop.create_server()

然后在第一次连接时:

loop.create_server()-> _factory_invoker()->factory()

该属性在以下几行smtpd中设置:_factory_invoker

self._thread_exception这些行中解释:

如您所见,如果self.smtpdNone,那么只有在 中出现错误时才会发生_factory_invoker()。如果是这样,错误应该已经被捕获并记录在self._thread_exception. 如果self._thread_exceptionNone,那么_factory_invoker()已经成功,因此self.smtpd不可能None

我在解决此问题时遇到的主要问题是,在我的所有测试系统(Windows、Ubuntu、OpenSUSE、MacOS 和 FreeBSD)上,我从未遇到过类似的错误。

所以我很难过。我将不胜感激有关解决此问题的任何想法。