为何查找 GitHub 用户的电子邮件地址比你想象的更难

发布日期:2026-05-03 10:02:39   浏览量 :7
发布日期:2026-05-03 10:02:39  
7

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

你找到了一位你的工作所依赖的贡献者。可能是你使用的某个软件包的维护者,一位在上游为你修复了某些问题的开发者,或者是你需要与之协调处理某个通用漏洞披露(CVE)的作者。你拥有他们的 GitHub 用户名,但你需要他们的电子邮件地址。

你可能认为这只需一次 GET 请求即可获取。事实并非如此。以下是原因——以及真正找到邮箱所需的方法。

GitHub 应用程序接口(API)中不包含该信息

GET /users/:login 会返回一个 email 字段。但对于绝大多数用户而言,该字段的值为 null

GitHub 多年前已将默认设置改为隐私保护。如今当你注册时,你的提交电子邮件会被设置为 <id>+<login>@users.noreply.github.com,且公开个人资料中的电子邮件字段为空。那些早期选择公开邮箱的账户仍然会暴露地址,但这类用户占少数——而你最希望联系的人(活跃的维护者、注重安全的开发者)恰恰是那些关闭了此功能的人。

因此,此路不通。

提交记录中通常也没有(大多数情况下)

下一个显而易见的举动是查看用户的提交记录。每次提交在其元数据中都包含作者电子邮件。选择一个公共仓库,获取提交记录,然后提取电子邮件。

curl https://api.github.com/repos/torvalds/linux/commits | jq '.[0].commit.author.email'
# "torvalds@linux-foundation.org"

这对林纳斯·托瓦兹有效,但对大多数人无效。对任何较为现代的仓库运行此命令,你会看到大量如下结果:

"49699333+dependabot[bot]@users.noreply.github.com"
"12345678+somecontributor@users.noreply.github.com"

只要作者启用了“保持我的电子邮件地址私密”设置(这是默认设置),GitHub 就会将提交电子邮件重写为 noreply 格式。<id>+<login> 部分代表用户的 GitHub ID 和登录名——如果你只想识别他们,这很有用,但你已经知道了他们的登录名。你想要的是给他们发电子邮件

事件归档:难度更大,但是真实数据

还有一个开发者工具人员有时会忽略的来源:公共事件流。GitHub 发布了一个包含所有公共事件(推送、开启议题、评论、发布版本等)的数据流,GH Archive 自 2011 年以来每小时都在记录这些数据——数以 TB 计的新行分隔 JSON 文件,经过 gzip 压缩,可供免费下载。

每个 PushEvent 都携带底层的提交元数据,包括作者姓名和电子邮件。原则上,如果开发者在启用隐私邮箱设置之前曾推送过提交,或者他们从使用真实地址的持续集成(CI)流水线进行推送,那么该电子邮件就会存在于归档中。

处理这项工作的流程大致如下:

gz = Zlib::GzipReader.new(StringIO.new(http.get(archive_url).body))

gz.each_line do |line|
  

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部