专栏名称: 宝玉xp
前微软Asp.Net最有价值专家 互联网科技博主 我是宝玉。
目录
相关文章推荐
黄建同学  ·  #国庆节##国庆节假期第1天# ... ·  昨天  
爱可可-爱生活  ·  //@爱可可-爱生活: ... ·  5 天前  
黄建同学  ·  pearai-app,另一个有名的开源 ... ·  5 天前  
爱可可-爱生活  ·  几篇论文实现代码:《Teaching ... ·  5 天前  
51好读  ›  专栏  ›  宝玉xp

#开源项目推荐# smail, Temporary email-20241001121709

宝玉xp  · 微博  · AI  · 2024-10-01 12:17

正文

2024-10-01 12:17

#开源项目推荐# smail, Temporary email reciever

这个项目很有创意,充分利用了 CloudFlare 的 Email 转发功能,实现了一个临时接收邮件的程序,访问时为你提供了一个临时的邮箱,你可以临时接收注册验证码之类的临时邮件。

技术实现上,就是将邮件转发到 CloudFlare 的 Worker,Worker 收到邮件后将邮件解析后存数据库,后面收到邮件了,就可以按照分配给你的邮件去检索收到的邮件。

其实发散一下,还可以做一个 newsletter 阅读器,我现在 newsletter 的邮件都是垃圾邮件,可以提供一个服务,生成专门用于订阅的 newsletter 的邮箱,然后收到 newsletter 后,解析排版后直接网页阅读。

项目地址:网页链接

顺便收一下,我给作者提了一点技术上的改进建议,按照当前的架构可能使用量一大就会导致数据库上涨飞快,因为所有邮件内容都是存数据库,邮件如果有附件的话一会就不够用了,另外数据量一大没有正确的索引也会导致检索速度下降。

所以相对更好一点的架构是数据库只存 Meta 数据,也就是显示邮件列表、查询和排序用到的数据,其余数据存在更便宜更大的 R2 里面,当用户点击邮件详情的时候再去 R2 读取和解析原始邮件,这样可以节约大量数据库空间。

另外一个问题就是索引,比如说你的查询是:
select * from emails where messageTo="xxx@xxx.com" order by createdAt desc

那么如果你没有正确的索引,每次查询会遍历整个数据表的所有记录,数据量一大会很慢。

那应该怎么建索引呢?

另一个常犯的错误是在 messageTo 和 createdAt 上分别建索引,messageTo 上那条索引在查询时是有效果的,但是这条索引对于排序没有任何帮助。

正确的做法是建一条索引,但是索引字段是 messageTo 和 createdAt,messageTo 在前面,createdAt 在后面,顺序不能错,否则索引也白建了。

其实也很好理解:这样的索引就相当于你先用messageTo对数据记录进行排序,然后再对每一个messageTo里面的记录按照createdAt排序,这样你用这条索引检索出来的结果,首先可以快速的检索到特定messageTo的结果,并且检索后的结果是排序好的。