使用 Python 或 Django 处理收到的电子邮件?

2024-05-13

我了解如何通过 Django 发送电子邮件,但我希望用户能够回复电子邮件。如果他们发送(以及我收到)的电子邮件包含与某个字符串匹配的消息,我将调用一个函数。

我已经做了一些谷歌搜索,但除了自己制作脚本之外似乎没有什么好的解决方案。如果有什么东西可以做到这一点,请纠正我;否则,我可以使用什么来开始编写自己的脚本来执行此操作?

Thanks!


我们正在做一些与 plone 类似的事情,通过配置 postfix 在接收到特定域的电子邮件时向 plone 发出 HTTP 请求。这也应该可以通过 django 轻松实现,因此您只需配置服务器并在 django 中编写一个接收电子邮件的视图即可。

这就是你可以做到的:

1) 设置您的 DNS,以便域的 MX 记录指向您的服务器。

2)配置postfix虚拟别名/etc/postfix/virtual:

example.com anything
[email protected] /cdn-cgi/l/email-protection django-mail-in

3) and /etc/aliases:

django-mail-in: "|/usr/local/bin/mta2django.py http://127.0.0.1:8000/mail-inbound"

4) The /usr/local/bin/mta2django.py由 postscript 调用并将邮件发送到mail-inboundDjango 视图。这mta2django.py应该管用:

#!/usr/bin/python

import sys, urllib
import os


def post_message(url, recipient, message_txt):
    """ post an email message to the given url
    """

    if not url:
        print "Invalid url."
        print "usage: mta2django.py url <recipient>"
        sys.exit(64)

    data = {'mail': message_txt}
    if recipient and len(recipient) > 0:
        data ['recipient'] = recipient

    try:
        result = urllib.urlopen(url, urllib.urlencode(data)).read()
    except (IOError,EOFError),e:
        print "error: could not connect to server",e
        sys.exit(73)

    try:
        exitcode, errormsg = result.split(':')
        if exitcode != '0':
            print 'Error %s: %s' % (exitcode, errormsg)
            sys.exit(int(exitcode))
    except ValueError:
        print 'Unknown error.'
        sys.exit(69)

    sys.exit(0)


if __name__ == '__main__':
    # This gets called by the MTA when a new message arrives.
    # The mail message file gets passed in on the stdin

    # Get the raw mail
    message_txt = sys.stdin.read()

    url = ''
    if len(sys.argv)>1:
        url = sys.argv[1]

    recipient = ''
    # If mta2django is executed as external command by the MTA, the
    # environment variable ORIGINAL_RECIPIENT contains the entire
    # recipient address, before any address rewriting or aliasing
    recipient = os.environ.get('ORIGINAL_RECIPIENT')

    if len(sys.argv)>2:
        recipient = sys.argv[2]

    post_message(url, recipient, message_txt)

5)编写django视图/mail-inbound它接收邮件并执行您需要它执行的操作。在请求中您有:

  • mail- 完整的电子邮件信息
  • recipient- 原始收件人(当您没有捕获特定电子邮件地址而是整个域/子域时很有用)

您可以使用 python 解析电子邮件email module:

import email

msg = email.message_from_string(request.get('mail'))

由于我不是后缀专家,我不确定是否可以编辑/etc/postfix/virtual and /etc/aliases足够了。详细信息请查阅 postfix 文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 或 Django 处理收到的电子邮件? 的相关文章

随机推荐

  • 使用 gtable 排列 ggplot 绘图(具有相同宽度的 grobs)以创建 2x2 布局

    我正在尝试使用 grobs 和 gtable 将 4 个 ggplot2 图排列成 2x2 网格 我不知道如何设置宽度 也不知道如何设置非 1xn 或 nx1 排列 使用此代码 data iris a lt ggplot iris aes
  • 简单对话框中的 ViewPager

    我想在对话框中使用 ViewPager 但失败了 这是所有代码 对话框中显示两个片段 Layouts main xml
  • 如何看待Python的负数按位运算?

    我发现很难思考 Python 和 Python3 的无限精度负数和按位运算 它不是 32 位或 64 位 这1左边的 s 可以被认为是 无穷多个 它不是很明确 这就是为什么有时很难思考它是如何运作的 似乎一种可行的方法是 总是让它更多 例如
  • 将 allMatch、noneMatch 和 anyMatch 合并到单个流上

    我想要以下逻辑 我知道它不起作用 因为它多次消耗流 但我不知道如何实现它 Stream
  • 由于“环境错误:[错误 13]:权限被拒绝:'usr/local/bin/f2py'”而无法安装软件包

    我正在尝试在 macOS X 上安装 numpy 但执行命令后pip install numpy我收到错误 环境错误 错误13 权限被拒绝 usr local bin f2py 我如何解决它 这对我有用 pip3 install user
  • string.split("(?!^)") 解释

    我正在尝试将字符串的字符拆分为字符串数组 我找到了解决方案here https stackoverflow com questions 5235401 split string into array of character strings
  • Angular 6 Asp.Net(非 Core)Web Api CORS 请求失败

    我正在构建一个 Net Web Api 它将由 Angular 6 客户端使用 但出于某种原因 我无法使其在我的开发环境中工作 我从一个非常简单的 Web Api 开始 它只返回一个字符串 用于前端和后端测试目的之间的通信 GET api
  • TFS2010 - SourceGetVersion 中出现错误的变更集

    我目前正在设置 Team Foundation Server 2010 在执行构建时我发现了一个非常奇怪的行为 情况说明 我们有2家分行 发展 Main 所有开发人员仅将代码签入开发分支 构建经理每天一次将一些变更集合并到主分支 在开发分支
  • 如何在 astro 中将服务器变量传递给客户端 JS?

    I found this https developers google com calendar api quickstart js step 1 set up the sample github https github com goo
  • WPF TabControl的SelectedIndex设置问题

    我有一个包含两个项目的 TabControl
  • 确定一个范围是否完全被一组范​​围覆盖

    如何检查范围是否为完全覆盖由一组范围 在以下示例中 WITH ranges id a b AS SELECT 1 0 40 UNION SELECT 2 40 60 UNION SELECT 3 80 100 UNION SELECT 4
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • 相当于 java PBKDF2WithHmacSHA1 的 Python

    我的任务是构建一个 API 的使用者 该 API 需要带有 UNIX 时间种子值的加密令牌 我看到的示例是使用我不熟悉的 Java 实现的 在阅读文档和其他堆栈文章后一直无法找到解决方案 使用javax crypto SecretKey j
  • FlatList 和 VirtualizedList 的区别

    我是 React Native 的新手 对两者之间的区别感到困惑FlatList and VirtualizedList So 两者有什么区别FlatList and VirtualizedList 我应该什么时候使用每个 The
  • htaccess隐藏php扩展时出错,只隐藏html

    我在使用 htaccess 隐藏网站上的 php 扩展时遇到问题 我看到很多网站试图修复它 但没有任何结果 但只有 html 扩展名对我来说是隐藏的 在我的 htaccess 上 我用这个来隐藏扩展 它就在错误页面之后 这是我的 htacc
  • 致命错误:调用未定义的方法 mysqli_stmt::query()

    为什么我会收到以下错误 致命错误 调用未定义的方法 mysqli stmt query mysqli new mysqli localhost or die mysqli gt connect error function checklog
  • Python 3 中的递归搜索 JSON/DICT

    我在 Python 3 中实现了一些 API 这些 API 允许我根据班级代码接收有关学校的信息 但我想知道如何通过类代码获取信息 例子 我输入代码GF528S我希望程序告诉我班级 3C INF 地址 Address 1 Milan 如果可
  • 使用本地 JSON 数据填充 jQuery Mobile ListView

    我正在尝试使用本地 JSON 信息填充 JQM ListView 但是 不会创建任何列表项 任何帮助 将不胜感激 这是我的代码 JSON 文件结构 name test calories 1000 fat 100 protein 100 ca
  • 是否可以“缩小”PdfPtable?

    我目前正在使用 Itextsharp 但在使用 PDfPtables 时遇到一些问题 有时 它们对于一个页面来说太大了 并且当添加到文档中时 它们会被分成多个页面 可悲的是 这种理性的行为对于我的一些上级来说是不可接受的 他们一直坚持认为表
  • 使用 Python 或 Django 处理收到的电子邮件?

    我了解如何通过 Django 发送电子邮件 但我希望用户能够回复电子邮件 如果他们发送 以及我收到 的电子邮件包含与某个字符串匹配的消息 我将调用一个函数 我已经做了一些谷歌搜索 但除了自己制作脚本之外似乎没有什么好的解决方案 如果有什么东