python - 在 python 应用程序中发送和接收电子邮件(无 IMAP 或 POP3)

标签 python email smtp smtplib smtpd

我正在构建一个需要发送和接收电子邮件的应用程序。

但是,我不想拥有单独的电子邮件服务器(或使用 IMAP 和 POP3),因为我需要动态创建/删除/管理收件箱,不需要电子邮件收件箱密码等。

我有一个电子邮件存储数据库,我可以使用自定义的 smtpd 服务器代替 postfix 来接收电子邮件。但是,这样我就无法通过 postfix 发送电子邮件(使用 smtplib,通过端口 25 连接到 postfix 并发送电子邮件)

这个问题有解决办法吗?如何使用自定义 smtp 服务器发送电子邮件?我可以配置 postfix 将所有传入电子邮件中继到在另一个端口中运行的自定义 smtp 服务器,并仍然在端口 25 上使用 postfix 发送电子邮件吗?

感谢您的宝贵时间

最佳答案

通过使用自定义 SMTP 服务器,您可能会面临无意中创建安全漏洞或以某种方式违反 SMTP 协议(protocol)的风险。有这么多优秀的 SMTP 服务器(Postfix、exim、sendmail...),这对我来说听起来不是一个好的选择。

我能想到的解决该问题的最简单方法是使用 Postfix 来中继入站和出站电子邮件。 入站电子邮件可以配置为通过管道传送到应用程序,出站电子邮件可以配置为由 Postfix 直接传送或通过不同的服务器中继传送。

这样,您就可以使用能够解析符合 RFC822 的消息文件的应用程序,而不是自定义 SMTP 服务器。这比做完全相同的事情要好,但需要实现 SMTP 协议(protocol)的开销。

如果您需要接收大量消息,这种方法可能无法很好地扩展 - 每条消息都会 fork+exec 一个新进程。如果这是一个要求,一个好的方法是保留一个自定义 SMTP 服务器来完成这项工作,但让 Postfix 中继它的消息 - 然后您将受益于解析器前面的 Postfix 架构。

假设您采用将消息管道传输到应用程序的方法,那么您在 Postfix 中所需要做的就是

  1. 配置 Postfix 的 alias_maps ' 参数来查找这样的 map :

    alias_maps = hash:/etc/aliases, hash:/etc/postfix/app-aliases
    
  2. 然后,配置映射以将发送到每个地址的消息传送到应用程序中:

    test:         "|/usr/local/bin/your-app"
    
  3. 像往常一样,不要忘记$ postalias app-aliases

这将使发送到 test@yourdomain 的消息通过管道传输到 /usr/local/bin/your-app,它充当电子邮件网关您的应用程序。

关于python - 在 python 应用程序中发送和接收电子邮件(无 IMAP 或 POP3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921638/

相关文章:

java - Java中的电子邮件客户端

c# - 将超链接添加到 SSIS 中的电子邮件正文

node.js - Nodejs,使用 Bluehost SMTP 使用 Nodemailer 发送电子邮件未送达,没有错误

python - 从单个网页中抓取多个表格

python - Django Rest Framework自定义错误处理程序

Python 请求 API 调用不起作用

meteor - 邮件未发送;要启用发送,请设置 MAIL_URL 环境变量

python - 我应该如何解释 numpy.fft.rfft2 的输出?

linux - 如何在没有交换服务器的情况下通过网络共享电子邮件联系人?

php - 如何为 PHPMailer 设置 DSN(传递状态通知)?