【问题标题】:Reply to email to comment回复电子邮件以发表评论
【发布时间】:2013-05-30 08:18:53
【问题描述】:

我想以某种方式设置我的邮件服务器,以便如果有人向user@example.com 发送电子邮件,它将被定向到user 的收件箱。这不是邮箱。而是一个聊天平台。所以通信应该是实时的。工作流程是,

  1. 有人向user@example.com发送电子邮件。
  2. user 会收到一个包含该消息的聊天窗口。

我可以通过编写一个程序来解决这个问题,该程序每分钟轮询邮件服务器并检查新邮件。如果找到它只是发送一个聊天消息。但这不是实时的。 另一种选择可能是将某种插件添加到完成工作的邮件服务器中。我还没有设置任何邮件服务器。我将只设置可以帮助我执行此操作的邮件服务器。

我正在使用 Python、PHP。因此,欢迎使用这两种语言的任何解决方案。如果一切都失败了,我想我必须用 C 编写插件。

【问题讨论】:

  • 当有人向“xx@xx.com”发送电子邮件并且结果成功时,只需将数据插入数据库,然后对于消息部分只需检查数据库中的新数据
  • @rusly check for new data -- 这部分不是实时的。
  • jQuery 可以做到这一点$.post("request.php", function(html) { $(".output").html(html);

标签: php python email real-time


【解决方案1】:

Lamson 可以工作,它是用 Python 编写的。它位于您的 SMTP 服务器前面,并过滤掉您在其路由文件中定义的电子邮件。主要理由似乎是易于开发人员使用,并且旨在集成到其他软件中。

http://lamsonproject.org/

【讨论】:

    【解决方案2】:

    你可以这样做:

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

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

    @example.com django-mail-in

    3) 和 /etc/aliases:

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

    4) postscript 调用 /usr/local/bin/mta2django.py 并将邮件发送到 mail-inbound django 视图。这个 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 电子邮件模块解析电子邮件:

    导入电子邮件

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

    由于我不是后缀专家,我不确定编辑 /etc/postfix/virtual/etc/aliases 是否足够。详情请查阅 postfix 文档。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多