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

54 天前
 busier
公司关闭了外部网站浏览,但是对外收发邮件不限制。本着物尽其用的原则做了这样一个项目!

写了一个 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 渲染慢,但是这个可以理解,毕竟正常上网是边下载边渲染,而这里不行。

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

(搞好后发现服务器放在外面,可以实现有限的魔法效果,所以大家不用纠结在公司用是不是摸鱼违规的问题吧)
766 次点击
所在节点    程序员
6 条回复
ForkNMB
54 天前
IMAP 登录成功之后可以发 IDLE 命令等待邮件服务器新邮件通知的吧,起个进程挂着,IMAP 服务器有新邮件会通知 IDLE 状态的 session ,到时候再去 fetch 拉取邮件应该可行?为了防止遗漏也可以加个定时轮询的机制,间隔可以适当放长一些。当然你完全可以起一个定制化的 IMAP 服务器,找现成的代码改改就可以了,这样连 IMAP 命令都可以定制拓展。自己也可以定义邮件格式,比如基于附件形式的非对称加密解密(甚至可以上 Double Ratchet 之类的加密算法),这样即使外部截获了邮件,没有定制化的客户端也解密不了,安全性大大增强。
busier
54 天前
@ForkNMB 好吧,刚去了解了一下 IDLE ,可惜所用的两个服务商都不支持
serafin
54 天前
自建邮箱服务器, 就用外网的 bedian 也行吧
zkwang
53 天前
能把 python3 程序公开测试一下吗
ForkNMB
53 天前
如果你只是想要一个特定邮件送达的通知你可以直接用 SES 的邮件服务,收到邮件后可以通知 SQS 队列 or 执行 lambda ,或者是其他的第三方邮件服务(比如 mailgun 之类的)收取邮件会调用你提供的 webhook, 找个价钱合适的(白嫖的)服务就可以做接下来的工作了
lpe234
52 天前
我在想 你能不能自己实现个 IMAP Server ,再自定义几个协议 支持 HTTP 访问。不过国内的服务器基本不开放邮件端口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1059793

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX