V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
busier
V2EX  ›  程序员

试着实现一个用电子邮件半交互式上网浏览网页遇到一些问题需要寻求方案

  •  
  •   busier · 114 天前 · 842 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司关闭了外部网站浏览,但是对外收发邮件不限制。本着物尽其用的原则做了这样一个项目!

    写了一个 python3 程序运行在外网 Debian 12 上,每 60s 通过 IMAP 读取一次外网个人邮箱,只读取未读邮件并标记成已读,并解码 MIME 邮件内容,如果邮件内容为 GET https://v2ex.com/ 这样的形式,就将后面的 URL 通过 GeckoDriver 交给 Firefox 浏览器渲染,并将 css 、图片静态资源嵌入单个 HTML 中,再将 HTML 作为邮件内容发送回给请求者(当然有白名单限制)。

    目前用这种方法,用公司邮箱低速浏览 v2ex.com 不需要登陆就能看的帖子,效果还凑合

    主要问题是效率比较低

    我用一个国外的邮件服务商,如果设置每 10s 查询一次 IMAP 有没有新邮件,会不会因为频次太高被 Block 。我测试了半个小时,似乎没被封锁。但是用阿里企业邮箱(自己注册的)的时候,设置了每 60s 查询一次 IMAP ,结果不到 20 次就被 Block 了。所以 IMAP 到底怎么查询才能更加高效,但是又不被 Block 。

    回发邮件走的自己的写邮件接口,邮件接口内有对发件进行 S/MIME 数字签名和加密的操作,有发件缓冲队列控制发件频次。

    目前我还不会对 S/MIME 邮件进行解密操作,找了好久也没找到资料。所以请求者只能使用明文,只有服务器回发邮件能进行 S/MIME 加密。

    最大的问题还是 IMAP 读取效率太低了,在就是 Firefox Gecko 渲染慢,但是这个可以理解,毕竟正常上网是边下载边渲染,而这里不行。

    问下各位还有没有什么好的实现思路???

    (搞好后发现服务器放在外面,可以实现有限的魔法效果,所以大家不用纠结在公司用是不是摸鱼违规的问题吧)
    6 条回复
    ForkNMB
        1
    ForkNMB  
       114 天前   ❤️ 1
    IMAP 登录成功之后可以发 IDLE 命令等待邮件服务器新邮件通知的吧,起个进程挂着,IMAP 服务器有新邮件会通知 IDLE 状态的 session ,到时候再去 fetch 拉取邮件应该可行?为了防止遗漏也可以加个定时轮询的机制,间隔可以适当放长一些。当然你完全可以起一个定制化的 IMAP 服务器,找现成的代码改改就可以了,这样连 IMAP 命令都可以定制拓展。自己也可以定义邮件格式,比如基于附件形式的非对称加密解密(甚至可以上 Double Ratchet 之类的加密算法),这样即使外部截获了邮件,没有定制化的客户端也解密不了,安全性大大增强。
    busier
        2
    busier  
    OP
       114 天前
    @ForkNMB 好吧,刚去了解了一下 IDLE ,可惜所用的两个服务商都不支持
    serafin
        3
    serafin  
       114 天前 via Android
    自建邮箱服务器, 就用外网的 bedian 也行吧
    zkwang
        4
    zkwang  
       113 天前
    能把 python3 程序公开测试一下吗
    ForkNMB
        5
    ForkNMB  
       113 天前
    如果你只是想要一个特定邮件送达的通知你可以直接用 SES 的邮件服务,收到邮件后可以通知 SQS 队列 or 执行 lambda ,或者是其他的第三方邮件服务(比如 mailgun 之类的)收取邮件会调用你提供的 webhook, 找个价钱合适的(白嫖的)服务就可以做接下来的工作了
    lpe234
        6
    lpe234  
       112 天前
    我在想 你能不能自己实现个 IMAP Server ,再自定义几个协议 支持 HTTP 访问。不过国内的服务器基本不开放邮件端口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2513 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:00 · PVG 00:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.