2个稳定版本
1.0.1 | 2024年6月9日 |
---|---|
1.0.0 | 2024年6月7日 |
#315 in 电子邮件
53 每月下载量
200KB
185 行
电子邮件地址提取器
一个使用纯Rust编写的闪电般的命令行工具,可以从指定路径中的文件中自动提取电子邮件地址。
支持的文件类型
- 纯文本(txt、csv、sql、json、html、xml等)
- 便携式文档格式(pdf)
- 微软Word(docx)
- 微软Excel(xlsx)
- 微软PowerPoint(pptx)
- OpenOffice Writer(odt)
- OpenOffice电子表格(ods)
- OpenDocument演示文稿(odp)
用法
cargo run --release /path/to/file
该工具将提取的电子邮件地址写入当前目录中名为emails.txt
的纯文本文件。
示例
使用由Have I Been Pwned提供的示例文件,该文件包含1000万条典型的泄露数据记录,我们确认此工具成功提取了1000万个电子邮件地址。
在\sample
文件夹中,提供了多个示例文件,以展示该工具从各种文件格式中提取电子邮件地址的能力。
这些示例文件包括
- file.html
- file.json
- file.odp
- file.ods
- file.odt
- file.pdf
- file.pptx
- file.sql
- file.txt
- file.xlsx
- file.xml
背景
本项目受到Have I Been Pwned的启发,旨在帮助从数据泄露中提取电子邮件地址,这些数据通常以csv或sql等纯文本文件格式存在。通过使用HashSet
,我们确保输出没有重复。
目前,在纯Rust中处理多种文件类型还没有一种完美的解决方案。在这里,我们使用魔数来识别文件的MIME类型,然后根据该知识尝试提取文本内容。并非所有文件类型都使用相同的编码,并且一些文件格式实际上是包含多个不同文件类型的zip存档,例如xml。
要从文本中提取电子邮件地址,我们使用众所周知的正则表达式 \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b
,它可以很好地匹配 任何 电子邮件地址。制定一个 完美 的正则表达式来验证电子邮件地址实际上并不简单。关于这个主题的 讨论、正则表达式 和 解决方案 都是具有争议性的。真正验证电子邮件地址的唯一方法是将电子邮件发送到该地址,这显然不是我们要做的事情。
路线图
- 同时从多个文件中提取电子邮件地址
依赖项
~26MB
~428K SLoC