服务器建议(smtp)

2024-09-20 22:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个相当小的项目。我的工作是基于smtpd.py公司但慢慢地走向完全不同的东西。在

这是一个smtp服务器。它目前可以接收和转发邮件。这是很直截了当的,但我到了一个地步,我问自己一些问题。在

在smtpd.py公司使用asyncore和asychat。问题是它是一个使用异步api的进程。一切正常,我可以更进一步,没有太多问题。在

问题是,如果服务器绑定在端口25上,它必须在根uid下。所以这是个大问题。smtp服务器背后的想法是,我可以使用python实现很多事情。我想能够访问本地用户,数据库或任何可能的数据存储。我甚至可以在需要时添加对它的支持。在

问题是,我觉得使用根用户控制所有这些控件是非常不安全的。。。如果有人能做点什么,最终得到一个根pythonshell。。。在

所以一开始我想创建线程并使用操作系统集UID但它似乎不起作用,也可能很危险。在

我的第二个想法是:接受连接,然后分叉并更改uid。我应该能够从forked进程写入/读取套接字,一切都应该很好。在

第三个想法是有一个代理服务器,将所有消息转发到一个本地服务器,该服务器将自己处理这些消息。唯一的问题是,如果有人不应该使用我的smtp服务器,代理就不能授权或执行任何操作,因为它只是一个没有实际访问权限的代理。在

我相信叉子是最有趣的解决办法。在

或者有什么我还没想到。在

不管怎样,谢谢

--编辑--

显然,如果进程是用root启动的,并且一旦创建了套接字,就可以使用操作系统集UID. 我想它不是很便携,但现在不是什么大问题。在搜索了金字塔/塔架/锡膏的密码后,我终于找到了那东西!SocketServer模块。我可能会用forking mixin或ThredingMixIn。可以定义线程的数量等

无论如何,对于那些想知道我为什么不使用postfix、exim或qmail的人来说。。这很简单,我不是真的做一个smtp服务器。如果只实现接收电子邮件、接受或拒绝收件人或发件人等最低要求,则smtp协议相当简单。。转义每个新行的第一个“.”,因为RFC说数据以“\r\n.\r\n”结尾。在

在我看来,python更像是构建块。我们的想法不是要制作一个smtp服务器(我肯定会实现ESMTP),而是要创建一个“框架”来构建自己的服务器。我有问题,我不相信我是孤独的。有人设计了一个配置文件和一种配置postfix的方法。它是硬编码的,不适合所有情况。制造一个适合所有情况的服务器也不会奏效。它可能会变得又大又丑。这样做的目的是使在服务器上添加所需的部件变得容易。如果要使用数据库,请将所需的数据库用于现有模块。进行查询并返回结果。在

如果你真的想用某些域名或者域名来定义它,你就可以使用它。在

例如,我看到一个用例。真的很奇怪,但还是。只使用一台服务器在postfix上设置这种设置有多容易。你有三个领域。a、 com,b.com,c.com。在

a.com使用相同的用户名将所有收到的邮件发送到maildir和b.com。 b、 com使用相同的用户名将所有收到的邮件发送到maildir和c.com。 c、 com使用相同的用户名将所有收到的邮件发送到maildir和a.com。在

没有域接受他们已经发送的电子邮件。在

在换句话说

           a.com -> b.com -> c.com -x-> a.com
           b.com -> c.com -> a.com -x-> b.com
           ... 

这里的想法是邮件将被复制到多个域,但它不能返回到它的所有者。这种用例应该非常简单。但是如果所有的域都把他们的邮件保存在不同的位置,或者我们希望每2次跳出保存一次邮件呢。在

^{pr2}$

Tags: 数据用户py服务器com数据库uid进程
2条回答

这篇文章的标题似乎与提出的问题不符。尽管如此,我可以理解提出的一些问题和评论。特别是,我同意Jim Garrison的观点,这将是一次有益的学习经验,有助于深入了解SMTP和邮件服务器的原理。然而,如果目的不是为了学习,那么使用现有的、经过良好测试的、可能更安全的选项可能更务实、更经济。值得考虑的是Lamson,因为您已经在使用Python和其他邮件服务器,特别是Exim,它提供了非常灵活和强大的配置选项和过滤。这些应用程序的开发人员和支持社区非常重要,而且都有很好的文档记录。然后你可以把你的时间花在解决特定于你的项目的问题上,而不是那些已经被解决的问题。在

这个问题的答案是使用ServerSocket。我将使用线程或分叉子类。它非常灵活,可以毫无畏惧地取代asyncore。它已经被塔,金字塔等使用,但在我的情况下,它将处理smtp消息,而不是http。在

相关问题 更多 >

    热门问题