【发布时间】:2012-11-21 20:49:20
【问题描述】:
我找不到任何关于用户在向 Lamson 发送邮件之前进行身份验证的信息。我发现唯一提到的 SSL/TLS 是在 Relay 类中,据我所知,它在 Lamson 处理完消息后运行。我希望 Lamson 在进行任何处理之前检查 LDAP 凭据,但我不希望通过网络发送的密码未加密。如果有某种身份验证处理程序,我可以处理 LDAP 部分,但我也没有找到。
我还没有写任何代码,现在只是通过阅读文档来探索选项。
【问题讨论】:
我找不到任何关于用户在向 Lamson 发送邮件之前进行身份验证的信息。我发现唯一提到的 SSL/TLS 是在 Relay 类中,据我所知,它在 Lamson 处理完消息后运行。我希望 Lamson 在进行任何处理之前检查 LDAP 凭据,但我不希望通过网络发送的密码未加密。如果有某种身份验证处理程序,我可以处理 LDAP 部分,但我也没有找到。
我还没有写任何代码,现在只是通过阅读文档来探索选项。
【问题讨论】:
答案是 Lamson 不支持 SMTP AUTH(需要用户在服务器接受电子邮件之前进行身份验证的 SMTP 扩展),因为它建立在 Python 标准库 smtpd 模块之上,该模块本身不支持 SMTP AUTH。
您可以通过查看lamson.server.SMTPReceiver(这是在 Lamson 中实现传入 SMTP 服务器并继承自 smptd.SMTPServer 的类)和 smtpd.SMTPChannel(最初处理的类传入的 SMTP 消息,然后将其传递给 smtpd.SMTPServer.process_message())。
但是,一切都没有丢失,this project 是标准库 smptd 的衍生产品,旨在提供对 SMTP AUTH 和 SSL 的支持(同时满足您的要求)。
因此,您可以编写一个从上述项目的SMTPServer 派生的新类,并模拟Lamson 的STMPReceiver 的行为。然后,在 Lamson 的 config/boot.py 中,您需要更改行:
from lamson.server import Relay, SMTPReceiver
收件人:
from lamson.server import Relay
from my_module import my_class as SMTPReceiver
根据需要替换 my_module 和 my_class 以加载新编写的类。
这将确保在 Lamson 收到电子邮件时执行用户身份验证在进行任何进一步处理之前。当然,您必须确保仅通过 SSL 启用连接,并按照您所说的那样实现 LDAP 部分(除非某些 SASL 实现或其他实现提供)。
我认为这几乎涵盖了它。祝你好运:)
【讨论】: