tempmail_sdk 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +116 -0
  3. data/lib/tempmail_sdk/channels.rb +289 -0
  4. data/lib/tempmail_sdk/channels_data.rb +289 -0
  5. data/lib/tempmail_sdk/client.rb +193 -0
  6. data/lib/tempmail_sdk/config.rb +104 -0
  7. data/lib/tempmail_sdk/html_utils.rb +42 -0
  8. data/lib/tempmail_sdk/http.rb +225 -0
  9. data/lib/tempmail_sdk/logger.rb +38 -0
  10. data/lib/tempmail_sdk/normalize.rb +193 -0
  11. data/lib/tempmail_sdk/providers/anonbox.rb +248 -0
  12. data/lib/tempmail_sdk/providers/anonymmail.rb +92 -0
  13. data/lib/tempmail_sdk/providers/byom.rb +48 -0
  14. data/lib/tempmail_sdk/providers/catchmail.rb +110 -0
  15. data/lib/tempmail_sdk/providers/cleantempmail.rb +49 -0
  16. data/lib/tempmail_sdk/providers/devmail_uk.rb +58 -0
  17. data/lib/tempmail_sdk/providers/dropmail.rb +133 -0
  18. data/lib/tempmail_sdk/providers/dropmail_click.rb +81 -0
  19. data/lib/tempmail_sdk/providers/dropmail_me.rb +163 -0
  20. data/lib/tempmail_sdk/providers/duckmail.rb +63 -0
  21. data/lib/tempmail_sdk/providers/eyepaste.rb +119 -0
  22. data/lib/tempmail_sdk/providers/fake_email_site.rb +48 -0
  23. data/lib/tempmail_sdk/providers/fake_legal.rb +109 -0
  24. data/lib/tempmail_sdk/providers/fmail.rb +87 -0
  25. data/lib/tempmail_sdk/providers/freecustom.rb +135 -0
  26. data/lib/tempmail_sdk/providers/getnada.rb +146 -0
  27. data/lib/tempmail_sdk/providers/gonebox_email.rb +89 -0
  28. data/lib/tempmail_sdk/providers/guerrillamail.rb +62 -0
  29. data/lib/tempmail_sdk/providers/guerrillamail_mirrors.rb +81 -0
  30. data/lib/tempmail_sdk/providers/harakirimail.rb +84 -0
  31. data/lib/tempmail_sdk/providers/haribu.rb +176 -0
  32. data/lib/tempmail_sdk/providers/inboxes.rb +110 -0
  33. data/lib/tempmail_sdk/providers/inboxkitten.rb +90 -0
  34. data/lib/tempmail_sdk/providers/linshiyou.rb +157 -0
  35. data/lib/tempmail_sdk/providers/lroid.rb +170 -0
  36. data/lib/tempmail_sdk/providers/m2u.rb +126 -0
  37. data/lib/tempmail_sdk/providers/mail10s.rb +59 -0
  38. data/lib/tempmail_sdk/providers/mail123.rb +82 -0
  39. data/lib/tempmail_sdk/providers/mail_cx.rb +133 -0
  40. data/lib/tempmail_sdk/providers/mail_sunls.rb +68 -0
  41. data/lib/tempmail_sdk/providers/mail_tm.rb +99 -0
  42. data/lib/tempmail_sdk/providers/mailcatch.rb +91 -0
  43. data/lib/tempmail_sdk/providers/maildrop.rb +92 -0
  44. data/lib/tempmail_sdk/providers/maildrop_cc.rb +110 -0
  45. data/lib/tempmail_sdk/providers/mailforspam.rb +96 -0
  46. data/lib/tempmail_sdk/providers/mailhole_de.rb +70 -0
  47. data/lib/tempmail_sdk/providers/mailinator.rb +182 -0
  48. data/lib/tempmail_sdk/providers/mailmomy.rb +108 -0
  49. data/lib/tempmail_sdk/providers/mailnesia.rb +141 -0
  50. data/lib/tempmail_sdk/providers/mffac.rb +101 -0
  51. data/lib/tempmail_sdk/providers/moakt.rb +296 -0
  52. data/lib/tempmail_sdk/providers/neighbours.rb +140 -0
  53. data/lib/tempmail_sdk/providers/neighbours_sh.rb +117 -0
  54. data/lib/tempmail_sdk/providers/nimail.rb +100 -0
  55. data/lib/tempmail_sdk/providers/ockito.rb +163 -0
  56. data/lib/tempmail_sdk/providers/one_sec_mail.rb +46 -0
  57. data/lib/tempmail_sdk/providers/restmail_net.rb +60 -0
  58. data/lib/tempmail_sdk/providers/rootsh.rb +167 -0
  59. data/lib/tempmail_sdk/providers/shitty_email.rb +84 -0
  60. data/lib/tempmail_sdk/providers/smailpro.rb +103 -0
  61. data/lib/tempmail_sdk/providers/ta_easy.rb +53 -0
  62. data/lib/tempmail_sdk/providers/temp_mail_io.rb +67 -0
  63. data/lib/tempmail_sdk/providers/temp_mail_now.rb +103 -0
  64. data/lib/tempmail_sdk/providers/temp_mail_org.rb +89 -0
  65. data/lib/tempmail_sdk/providers/tempemail_co.rb +142 -0
  66. data/lib/tempmail_sdk/providers/tempemail_info.rb +121 -0
  67. data/lib/tempmail_sdk/providers/tempemails_net.rb +159 -0
  68. data/lib/tempmail_sdk/providers/tempfastmail.rb +76 -0
  69. data/lib/tempmail_sdk/providers/tempgmailer.rb +126 -0
  70. data/lib/tempmail_sdk/providers/tempgo_email.rb +74 -0
  71. data/lib/tempmail_sdk/providers/tempinbox.rb +70 -0
  72. data/lib/tempmail_sdk/providers/tempmail.rb +66 -0
  73. data/lib/tempmail_sdk/providers/tempmail365.rb +119 -0
  74. data/lib/tempmail_sdk/providers/tempmail_fish.rb +89 -0
  75. data/lib/tempmail_sdk/providers/tempmail_fyi.rb +124 -0
  76. data/lib/tempmail_sdk/providers/tempmail_lol.rb +42 -0
  77. data/lib/tempmail_sdk/providers/tempmail_lol_v2.rb +57 -0
  78. data/lib/tempmail_sdk/providers/tempmail_plus.rb +80 -0
  79. data/lib/tempmail_sdk/providers/tempmailc.rb +80 -0
  80. data/lib/tempmail_sdk/providers/tempmailpro.rb +89 -0
  81. data/lib/tempmail_sdk/providers/tempmailten.rb +150 -0
  82. data/lib/tempmail_sdk/providers/temporam.rb +95 -0
  83. data/lib/tempmail_sdk/providers/tempp_mails.rb +150 -0
  84. data/lib/tempmail_sdk/providers/tempy_email.rb +73 -0
  85. data/lib/tempmail_sdk/providers/ten_minute_mail_net.rb +125 -0
  86. data/lib/tempmail_sdk/providers/tenminute_one.rb +255 -0
  87. data/lib/tempmail_sdk/providers/throwawaymail.rb +80 -0
  88. data/lib/tempmail_sdk/providers/tmail_link.rb +98 -0
  89. data/lib/tempmail_sdk/providers/uncorreotemporal.rb +84 -0
  90. data/lib/tempmail_sdk/providers/webmailtemp.rb +108 -0
  91. data/lib/tempmail_sdk/providers/xkx_me.rb +125 -0
  92. data/lib/tempmail_sdk/providers/zhujump.rb +256 -0
  93. data/lib/tempmail_sdk/registry.rb +1097 -0
  94. data/lib/tempmail_sdk/retry.rb +91 -0
  95. data/lib/tempmail_sdk/telemetry.rb +134 -0
  96. data/lib/tempmail_sdk/types.rb +164 -0
  97. data/lib/tempmail_sdk/version.rb +6 -0
  98. data/lib/tempmail_sdk/webui.rb +360 -0
  99. data/lib/tempmail_sdk.rb +76 -0
  100. metadata +142 -0
@@ -0,0 +1,1097 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "channels_data"
4
+
5
+ # provider 模块懒加载映射:模块名 => 相对文件路径
6
+ # 通过 Ruby autoload 延迟到渠道首次真正调用时才加载对应 provider 文件,
7
+ # 避免加载 SDK 时一次性 require 全部 provider(及其级联依赖),显著降低启动开销与常驻内存。
8
+ module TempmailSdk
9
+ module Providers
10
+ # 每个 provider 文件恰好定义一个同名子模块,映射一一对应(零歧义)。
11
+ PROVIDER_AUTOLOADS = {
12
+ Tempmail: "tempmail", MailTm: "mail_tm", Duckmail: "duckmail",
13
+ Guerrillamail: "guerrillamail", GuerrillamailMirrors: "guerrillamail_mirrors",
14
+ TempMailIo: "temp_mail_io", TempmailLol: "tempmail_lol", TempmailPlus: "tempmail_plus",
15
+ RestmailNet: "restmail_net", Inboxkitten: "inboxkitten", Maildrop: "maildrop",
16
+ MailCx: "mail_cx", OneSecMail: "one_sec_mail", Moakt: "moakt", Getnada: "getnada",
17
+ Mailinator: "mailinator", Mailmomy: "mailmomy", Catchmail: "catchmail",
18
+ Mailforspam: "mailforspam", FakeLegal: "fake_legal", TenminuteOne: "tenminute_one",
19
+ Zhujump: "zhujump", Anonymmail: "anonymmail", Byom: "byom", Cleantempmail: "cleantempmail",
20
+ DevmailUk: "devmail_uk", DropmailClick: "dropmail_click", FakeEmailSite: "fake_email_site",
21
+ Fmail: "fmail", Freecustom: "freecustom", GoneboxEmail: "gonebox_email",
22
+ Harakirimail: "harakirimail", Inboxes: "inboxes", M2u: "m2u", Mail10s: "mail10s",
23
+ Mail123: "mail123", Mffac: "mffac", Tempmailc: "tempmailc", NeighboursSh: "neighbours_sh",
24
+ Temporam: "temporam", Neighbours: "neighbours", TempyEmail: "tempy_email", Ockito: "ockito",
25
+ Tempmail365: "tempmail365", Tempinbox: "tempinbox", MailSunls: "mail_sunls",
26
+ Smailpro: "smailpro", MailholeDe: "mailhole_de", Nimail: "nimail", Rootsh: "rootsh",
27
+ ShittyEmail: "shitty_email", TaEasy: "ta_easy", TempMailNow: "temp_mail_now",
28
+ TempMailOrg: "temp_mail_org", TempemailCo: "tempemail_co", TempemailInfo: "tempemail_info",
29
+ TempemailsNet: "tempemails_net", Tempfastmail: "tempfastmail", Tempgmailer: "tempgmailer",
30
+ TempgoEmail: "tempgo_email", TempmailFish: "tempmail_fish", TempmailFyi: "tempmail_fyi",
31
+ TempmailLolV2: "tempmail_lol_v2", Tempmailpro: "tempmailpro", Tempmailten: "tempmailten",
32
+ TempMails: "tempp_mails", TenMinuteMailNet: "ten_minute_mail_net",
33
+ Throwawaymail: "throwawaymail", TmailLink: "tmail_link",
34
+ Uncorreotemporal: "uncorreotemporal", Webmailtemp: "webmailtemp", XkxMe: "xkx_me"
35
+ }.freeze
36
+
37
+ PROVIDER_AUTOLOADS.each do |mod_name, file|
38
+ autoload mod_name, File.join(__dir__, "providers", file)
39
+ end
40
+ end
41
+ end
42
+
43
+ module TempmailSdk
44
+ # 单个渠道的注册规格
45
+ #
46
+ # generate: 接收 GenerateEmailOptions,返回 EmailInfo 的 Proc
47
+ # get_emails: 接收 (email, token),返回 Array<Email> 的 Proc
48
+ ChannelSpec = Struct.new(:channel, :name, :website, :generate, :get_emails, keyword_init: true)
49
+
50
+ # 渠道注册表:单一事实来源
51
+ #
52
+ # 有序注册表数组 + 映射由同一处 register_channel 派生。
53
+ # list_channels、渠道信息、generate/get_emails 两个 dispatch 全部从注册表派生。
54
+ # 注册顺序即枚举顺序(硬约束,与 baseline 逐行一致)。
55
+ module Registry
56
+ # 有序渠道注册表,注册顺序即枚举顺序
57
+ REGISTRY = []
58
+ # 渠道标识到注册规格的映射,O(1) 查找分发
59
+ REGISTRY_MAP = {}
60
+
61
+ module_function
62
+
63
+ # 注册一个渠道:追加到有序列表并建立映射;重复注册视为编程错误
64
+ # @param spec [ChannelSpec]
65
+ def register_channel(spec)
66
+ raise "duplicate channel registration: #{spec.channel}" if REGISTRY_MAP.key?(spec.channel)
67
+
68
+ REGISTRY << spec
69
+ REGISTRY_MAP[spec.channel] = spec
70
+ end
71
+
72
+ # 校验 token 非空
73
+ def require_token(token, channel)
74
+ raise "token is required for #{channel} channel" if token.nil? || token.to_s.empty?
75
+
76
+ token
77
+ end
78
+
79
+ # 覆写 EmailInfo 的渠道标识(用于同一 provider 派生多个渠道别名)
80
+ def with_channel(info, channel)
81
+ info.channel = channel
82
+ info
83
+ end
84
+
85
+ # 尚未实现真实逻辑的渠道桩:可正常枚举,但调用时抛出 NotImplementedProviderError
86
+ # @param channel [String]
87
+ # @return [ChannelSpec]
88
+ def stub_spec(channel, name, website)
89
+ ChannelSpec.new(
90
+ channel: channel, name: name, website: website,
91
+ generate: ->(_opts) { raise NotImplementedProviderError, "channel not implemented yet: #{channel}" },
92
+ get_emails: ->(_email, _token) { raise NotImplementedProviderError, "channel not implemented yet: #{channel}" }
93
+ )
94
+ end
95
+
96
+ # 真实实现映射:slug => { generate: Proc(options)->EmailInfo, get_emails: Proc(email, token)->Array<Email> }
97
+ # 未列入者按桩注册。新增真实实现只需在此追加一处。
98
+ def real_implementations
99
+ p = Providers
100
+ {
101
+ "moakt" => {
102
+ generate: ->(o) { p::Moakt.generate_email(o.domain) },
103
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
104
+ },
105
+ "drmail-in" => {
106
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("drmail.in"), "drmail-in") },
107
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
108
+ },
109
+ "teml-net" => {
110
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("teml.net"), "teml-net") },
111
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
112
+ },
113
+ "tmpeml-com" => {
114
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmpeml.com"), "tmpeml-com") },
115
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
116
+ },
117
+ "tmpbox-net" => {
118
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmpbox.net"), "tmpbox-net") },
119
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
120
+ },
121
+ "moakt-cc" => {
122
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("moakt.cc"), "moakt-cc") },
123
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
124
+ },
125
+ "disbox-net" => {
126
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("disbox.net"), "disbox-net") },
127
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
128
+ },
129
+ "tmpmail-org" => {
130
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmpmail.org"), "tmpmail-org") },
131
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
132
+ },
133
+ "tmpmail-net" => {
134
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmpmail.net"), "tmpmail-net") },
135
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
136
+ },
137
+ "tmails-net" => {
138
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmails.net"), "tmails-net") },
139
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
140
+ },
141
+ "disbox-org" => {
142
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("disbox.org"), "disbox-org") },
143
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
144
+ },
145
+ "moakt-co" => {
146
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("moakt.co"), "moakt-co") },
147
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
148
+ },
149
+ "moakt-ws" => {
150
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("moakt.ws"), "moakt-ws") },
151
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
152
+ },
153
+ "tmail-ws" => {
154
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("tmail.ws"), "tmail-ws") },
155
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
156
+ },
157
+ "bareed-ws" => {
158
+ generate: ->(_o) { with_channel(p::Moakt.generate_email("bareed.ws"), "bareed-ws") },
159
+ get_emails: ->(e, t) { p::Moakt.get_emails(e, require_token(t, "moakt")) }
160
+ },
161
+ "tempmail" => {
162
+ generate: ->(o) { p::Tempmail.generate_email(o.duration) },
163
+ get_emails: ->(e, _t) { p::Tempmail.get_emails(e) }
164
+ },
165
+ "mail-tm" => {
166
+ generate: ->(_o) { p::MailTm.generate_email },
167
+ get_emails: ->(e, t) { p::MailTm.get_emails(e, require_token(t, "mail-tm")) }
168
+ },
169
+ "web-library-net" => {
170
+ generate: ->(_o) { with_channel(p::MailTm.generate_email, "web-library-net") },
171
+ get_emails: ->(e, t) { p::MailTm.get_emails(e, require_token(t, "mail-tm")) }
172
+ },
173
+ "duckmail" => {
174
+ generate: ->(_o) { p::Duckmail.generate_email },
175
+ get_emails: ->(e, t) { p::Duckmail.get_emails(e, require_token(t, "duckmail")) }
176
+ },
177
+ "guerrillamail" => {
178
+ generate: ->(_o) { p::Guerrillamail.generate_email },
179
+ get_emails: ->(e, t) { p::Guerrillamail.get_emails(e, require_token(t, "guerrillamail")) }
180
+ },
181
+ # guerrillamail 镜像家族:共用同一套 ajax.php API,仅固定 baseURL 不同
182
+ "guerrillamail-com" => {
183
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamail-com") },
184
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamail-com", e, require_token(t, "guerrillamail-com")) }
185
+ },
186
+ "sharklasers" => {
187
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("sharklasers") },
188
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("sharklasers", e, require_token(t, "sharklasers")) }
189
+ },
190
+ "sharklasers-com" => {
191
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("sharklasers-com") },
192
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("sharklasers-com", e, require_token(t, "sharklasers-com")) }
193
+ },
194
+ "grr-la" => {
195
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("grr-la") },
196
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("grr-la", e, require_token(t, "grr-la")) }
197
+ },
198
+ "grr-la-com" => {
199
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("grr-la-com") },
200
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("grr-la-com", e, require_token(t, "grr-la-com")) }
201
+ },
202
+ "guerrillamail-info" => {
203
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamail-info") },
204
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamail-info", e, require_token(t, "guerrillamail-info")) }
205
+ },
206
+ "spam4me" => {
207
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("spam4me") },
208
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("spam4me", e, require_token(t, "spam4me")) }
209
+ },
210
+ "guerrillamail-net" => {
211
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamail-net") },
212
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamail-net", e, require_token(t, "guerrillamail-net")) }
213
+ },
214
+ "guerrillamail-org" => {
215
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamail-org") },
216
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamail-org", e, require_token(t, "guerrillamail-org")) }
217
+ },
218
+ "guerrillamailblock" => {
219
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamailblock") },
220
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamailblock", e, require_token(t, "guerrillamailblock")) }
221
+ },
222
+ "guerrillamail-com-www" => {
223
+ generate: ->(_o) { p::GuerrillamailMirrors.generate_email("guerrillamail-com-www") },
224
+ get_emails: ->(e, t) { p::GuerrillamailMirrors.get_emails("guerrillamail-com-www", e, require_token(t, "guerrillamail-com-www")) }
225
+ },
226
+ "temp-mail-io" => {
227
+ generate: ->(_o) { p::TempMailIo.generate_email },
228
+ get_emails: ->(e, _t) { p::TempMailIo.get_emails(e) }
229
+ },
230
+ "tempmail-lol" => {
231
+ generate: ->(o) { p::TempmailLol.generate_email(o.domain) },
232
+ get_emails: ->(e, t) { p::TempmailLol.get_emails(e, require_token(t, "tempmail-lol")) }
233
+ },
234
+ "tempmail-plus" => {
235
+ generate: ->(_o) { p::TempmailPlus.generate_email },
236
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
237
+ },
238
+ # tempmail-plus 别名渠道:固定域名变体
239
+ "fexpost-com" => {
240
+ generate: ->(_o) { p::TempmailPlus.generate_email("fexpost.com", "fexpost-com") },
241
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
242
+ },
243
+ "fexbox-org" => {
244
+ generate: ->(_o) { p::TempmailPlus.generate_email("fexbox.org", "fexbox-org") },
245
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
246
+ },
247
+ "mailbox-in-ua" => {
248
+ generate: ->(_o) { p::TempmailPlus.generate_email("mailbox.in.ua", "mailbox-in-ua") },
249
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
250
+ },
251
+ "rover-info" => {
252
+ generate: ->(_o) { p::TempmailPlus.generate_email("rover.info", "rover-info") },
253
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
254
+ },
255
+ "chitthi-in" => {
256
+ generate: ->(_o) { p::TempmailPlus.generate_email("chitthi.in", "chitthi-in") },
257
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
258
+ },
259
+ "fextemp-com" => {
260
+ generate: ->(_o) { p::TempmailPlus.generate_email("fextemp.com", "fextemp-com") },
261
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
262
+ },
263
+ "any-pink" => {
264
+ generate: ->(_o) { p::TempmailPlus.generate_email("any.pink", "any-pink") },
265
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
266
+ },
267
+ "merepost-com" => {
268
+ generate: ->(_o) { p::TempmailPlus.generate_email("merepost.com", "merepost-com") },
269
+ get_emails: ->(e, _t) { p::TempmailPlus.get_emails(e) }
270
+ },
271
+ "restmail-net" => {
272
+ generate: ->(_o) { p::RestmailNet.generate_email },
273
+ get_emails: ->(e, _t) { p::RestmailNet.get_emails(e) }
274
+ },
275
+ "inboxkitten" => {
276
+ generate: ->(_o) { p::Inboxkitten.generate_email },
277
+ get_emails: ->(e, _t) { p::Inboxkitten.get_emails(e) }
278
+ },
279
+ "maildrop" => {
280
+ generate: ->(o) { p::Maildrop.generate_email(o.domain) },
281
+ get_emails: ->(e, t) { p::Maildrop.get_emails(e, t) }
282
+ },
283
+ "mail-cx" => {
284
+ generate: ->(o) { p::MailCx.generate_email(o.domain) },
285
+ get_emails: ->(e, t) { p::MailCx.get_emails(e, require_token(t, "mail-cx")) }
286
+ },
287
+ "ddker-com" => {
288
+ generate: ->(_o) { with_channel(p::MailCx.generate_email("ddker.com"), "ddker-com") },
289
+ get_emails: ->(e, t) { p::MailCx.get_emails(e, require_token(t, "mail-cx")) }
290
+ },
291
+ "1sec-mail" => {
292
+ generate: ->(_o) { p::OneSecMail.generate_email },
293
+ get_emails: ->(e, t) { p::OneSecMail.get_emails(e, require_token(t, "1sec-mail")) }
294
+ },
295
+ "getnada" => {
296
+ generate: ->(o) { p::Getnada.generate_email(o.domain) },
297
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
298
+ },
299
+ "1vpn-net" => {
300
+ generate: ->(_o) { p::Getnada.generate_email("1vpn.net", "1vpn-net") },
301
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
302
+ },
303
+ "abematv-com" => {
304
+ generate: ->(_o) { p::Getnada.generate_email("abematv.com", "abematv-com") },
305
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
306
+ },
307
+ "abematv-net" => {
308
+ generate: ->(_o) { p::Getnada.generate_email("abematv.net", "abematv-net") },
309
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
310
+ },
311
+ "abematv-org" => {
312
+ generate: ->(_o) { p::Getnada.generate_email("abematv.org", "abematv-org") },
313
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
314
+ },
315
+ "aceh-cc" => {
316
+ generate: ->(_o) { p::Getnada.generate_email("aceh.cc", "aceh-cc") },
317
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
318
+ },
319
+ "bangkabelitung-net" => {
320
+ generate: ->(_o) { p::Getnada.generate_email("bangkabelitung.net", "bangkabelitung-net") },
321
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
322
+ },
323
+ "cctruyen-com" => {
324
+ generate: ->(_o) { p::Getnada.generate_email("cctruyen.com", "cctruyen-com") },
325
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
326
+ },
327
+ "getnada-com" => {
328
+ generate: ->(_o) { p::Getnada.generate_email("getnada.com", "getnada-com") },
329
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
330
+ },
331
+ "getnada-email" => {
332
+ generate: ->(_o) { p::Getnada.generate_email("getnada.email", "getnada-email") },
333
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
334
+ },
335
+ "getnada-net" => {
336
+ generate: ->(_o) { p::Getnada.generate_email("getnada.net", "getnada-net") },
337
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
338
+ },
339
+ "jawatengah-net" => {
340
+ generate: ->(_o) { p::Getnada.generate_email("jawatengah.net", "jawatengah-net") },
341
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
342
+ },
343
+ "jawatimur-net" => {
344
+ generate: ->(_o) { p::Getnada.generate_email("jawatimur.net", "jawatimur-net") },
345
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
346
+ },
347
+ "kalimantanbarat-net" => {
348
+ generate: ->(_o) { p::Getnada.generate_email("kalimantanbarat.net", "kalimantanbarat-net") },
349
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
350
+ },
351
+ "kalimantanselatan-net" => {
352
+ generate: ->(_o) { p::Getnada.generate_email("kalimantanselatan.net", "kalimantanselatan-net") },
353
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
354
+ },
355
+ "kalimantantengah-net" => {
356
+ generate: ->(_o) { p::Getnada.generate_email("kalimantantengah.net", "kalimantantengah-net") },
357
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
358
+ },
359
+ "kalimantantimur-net" => {
360
+ generate: ->(_o) { p::Getnada.generate_email("kalimantantimur.net", "kalimantantimur-net") },
361
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
362
+ },
363
+ "kalimantanutara-net" => {
364
+ generate: ->(_o) { p::Getnada.generate_email("kalimantanutara.net", "kalimantanutara-net") },
365
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
366
+ },
367
+ "kepulauanriau-net" => {
368
+ generate: ->(_o) { p::Getnada.generate_email("kepulauanriau.net", "kepulauanriau-net") },
369
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
370
+ },
371
+ "luxury345-com" => {
372
+ generate: ->(_o) { p::Getnada.generate_email("luxury345.com", "luxury345-com") },
373
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
374
+ },
375
+ "malukuutara-net" => {
376
+ generate: ->(_o) { p::Getnada.generate_email("malukuutara.net", "malukuutara-net") },
377
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
378
+ },
379
+ "nusatenggarabarat-net" => {
380
+ generate: ->(_o) { p::Getnada.generate_email("nusatenggarabarat.net", "nusatenggarabarat-net") },
381
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
382
+ },
383
+ "nusatenggaratimur-net" => {
384
+ generate: ->(_o) { p::Getnada.generate_email("nusatenggaratimur.net", "nusatenggaratimur-net") },
385
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
386
+ },
387
+ "papuabarat-net" => {
388
+ generate: ->(_o) { p::Getnada.generate_email("papuabarat.net", "papuabarat-net") },
389
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
390
+ },
391
+ "papuabaratdaya-net" => {
392
+ generate: ->(_o) { p::Getnada.generate_email("papuabaratdaya.net", "papuabaratdaya-net") },
393
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
394
+ },
395
+ "papuaselatan-net" => {
396
+ generate: ->(_o) { p::Getnada.generate_email("papuaselatan.net", "papuaselatan-net") },
397
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
398
+ },
399
+ "pehol-com" => {
400
+ generate: ->(_o) { p::Getnada.generate_email("pehol.com", "pehol-com") },
401
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
402
+ },
403
+ "ptruyen-com" => {
404
+ generate: ->(_o) { p::Getnada.generate_email("ptruyen.com", "ptruyen-com") },
405
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
406
+ },
407
+ "pulaubali-net" => {
408
+ generate: ->(_o) { p::Getnada.generate_email("pulaubali.net", "pulaubali-net") },
409
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
410
+ },
411
+ "riau-net" => {
412
+ generate: ->(_o) { p::Getnada.generate_email("riau.net", "riau-net") },
413
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
414
+ },
415
+ "seokey-org" => {
416
+ generate: ->(_o) { p::Getnada.generate_email("seokey.org", "seokey-org") },
417
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
418
+ },
419
+ "sulawesibarat-net" => {
420
+ generate: ->(_o) { p::Getnada.generate_email("sulawesibarat.net", "sulawesibarat-net") },
421
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
422
+ },
423
+ "sulawesiselatan-net" => {
424
+ generate: ->(_o) { p::Getnada.generate_email("sulawesiselatan.net", "sulawesiselatan-net") },
425
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
426
+ },
427
+ "sulawesitengah-net" => {
428
+ generate: ->(_o) { p::Getnada.generate_email("sulawesitengah.net", "sulawesitengah-net") },
429
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
430
+ },
431
+ "sulawesitenggara-net" => {
432
+ generate: ->(_o) { p::Getnada.generate_email("sulawesitenggara.net", "sulawesitenggara-net") },
433
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
434
+ },
435
+ "sumaterabarat-net" => {
436
+ generate: ->(_o) { p::Getnada.generate_email("sumaterabarat.net", "sumaterabarat-net") },
437
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
438
+ },
439
+ "sumateraselatan-net" => {
440
+ generate: ->(_o) { p::Getnada.generate_email("sumateraselatan.net", "sumateraselatan-net") },
441
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
442
+ },
443
+ "sumaterautara-net" => {
444
+ generate: ->(_o) { p::Getnada.generate_email("sumaterautara.net", "sumaterautara-net") },
445
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
446
+ },
447
+ "villatogel-com" => {
448
+ generate: ->(_o) { p::Getnada.generate_email("villatogel.com", "villatogel-com") },
449
+ get_emails: ->(e, t) { p::Getnada.get_emails(require_token(t, "getnada"), e) }
450
+ },
451
+ # mailmomy 家族:mailmomy 主渠道从域名池随机选域,其余为固定域名变体(同后端 API)
452
+ "16888888-cyou" => {
453
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("16888888.cyou"), "16888888-cyou") },
454
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
455
+ },
456
+ "17666688-shop" => {
457
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("17666688.shop"), "17666688-shop") },
458
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
459
+ },
460
+ "282mail-com" => {
461
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("282mail.com"), "282mail-com") },
462
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
463
+ },
464
+ "bsdu32-buzz" => {
465
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("bsdu32.buzz"), "bsdu32-buzz") },
466
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
467
+ },
468
+ "doxu243-buzz" => {
469
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("doxu243.buzz"), "doxu243-buzz") },
470
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
471
+ },
472
+ "easyme-pro" => {
473
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("easyme.pro"), "easyme-pro") },
474
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
475
+ },
476
+ "evergreenco-shop" => {
477
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("evergreenco.shop"), "evergreenco-shop") },
478
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
479
+ },
480
+ "layueming-pics" => {
481
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("layueming.pics"), "layueming-pics") },
482
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
483
+ },
484
+ "mingyuekeji-online" => {
485
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("mingyuekeji.online"), "mingyuekeji-online") },
486
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
487
+ },
488
+ "mingyueming-click" => {
489
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("mingyueming.click"), "mingyueming-click") },
490
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
491
+ },
492
+ "mingyueming-shop" => {
493
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("mingyueming.shop"), "mingyueming-shop") },
494
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
495
+ },
496
+ "mingyukeji-lol" => {
497
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("mingyukeji.lol"), "mingyukeji-lol") },
498
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
499
+ },
500
+ "nuxh62-space" => {
501
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("nuxh62.space"), "nuxh62-space") },
502
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
503
+ },
504
+ "proid-cloud-ip-cc" => {
505
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("proid.cloud-ip.cc"), "proid-cloud-ip-cc") },
506
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
507
+ },
508
+ "sbook-pics" => {
509
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("sbook.pics"), "sbook-pics") },
510
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
511
+ },
512
+ "xue32-buzz" => {
513
+ generate: ->(_o) { with_channel(p::Mailmomy.generate_email("xue32.buzz"), "xue32-buzz") },
514
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
515
+ },
516
+ "mailmomy" => {
517
+ generate: ->(_o) { p::Mailmomy.generate_email },
518
+ get_emails: ->(e, _t) { p::Mailmomy.get_emails(e) }
519
+ },
520
+ # mailinator 家族:主渠道 mailinator.com,其余为姊妹域名别名(收信统一走 public 域名 API)
521
+ "mailinator" => {
522
+ generate: ->(_o) { p::Mailinator.generate_email },
523
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
524
+ },
525
+ "blackhole-djurby-se" => {
526
+ generate: ->(_o) { p::Mailinator.generate_email("blackhole.djurby.se", "blackhole-djurby-se") },
527
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
528
+ },
529
+ "block-bdea-cc" => {
530
+ generate: ->(_o) { p::Mailinator.generate_email("block.bdea.cc", "block-bdea-cc") },
531
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
532
+ },
533
+ "b-smelly-cc" => {
534
+ generate: ->(_o) { p::Mailinator.generate_email("b.smelly.cc", "b-smelly-cc") },
535
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
536
+ },
537
+ "carlton183-changeip-net" => {
538
+ generate: ->(_o) { p::Mailinator.generate_email("183carlton.changeip.net", "carlton183-changeip-net") },
539
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
540
+ },
541
+ "dea-soon-it" => {
542
+ generate: ->(_o) { p::Mailinator.generate_email("dea.soon.it", "dea-soon-it") },
543
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
544
+ },
545
+ "disposable-al-sudani-com" => {
546
+ generate: ->(_o) { p::Mailinator.generate_email("disposable.al-sudani.com", "disposable-al-sudani-com") },
547
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
548
+ },
549
+ "disposable-nogonad-nl" => {
550
+ generate: ->(_o) { p::Mailinator.generate_email("disposable.nogonad.nl", "disposable-nogonad-nl") },
551
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
552
+ },
553
+ "ebs-com-ar" => {
554
+ generate: ->(_o) { p::Mailinator.generate_email("ebs.com.ar", "ebs-com-ar") },
555
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
556
+ },
557
+ "etgdev-de" => {
558
+ generate: ->(_o) { p::Mailinator.generate_email("etgdev.de", "etgdev-de") },
559
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
560
+ },
561
+ "fwd2m-eszett-es" => {
562
+ generate: ->(_o) { p::Mailinator.generate_email("fwd2m.eszett.es", "fwd2m-eszett-es") },
563
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
564
+ },
565
+ "jama-trenet-eu" => {
566
+ generate: ->(_o) { p::Mailinator.generate_email("jama.trenet.eu", "jama-trenet-eu") },
567
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
568
+ },
569
+ "j-fairuse-org" => {
570
+ generate: ->(_o) { p::Mailinator.generate_email("j.fairuse.org", "j-fairuse-org") },
571
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
572
+ },
573
+ "m-887-at" => {
574
+ generate: ->(_o) { p::Mailinator.generate_email("m.887.at", "m-887-at") },
575
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
576
+ },
577
+ "m8r-davidfuhr-de" => {
578
+ generate: ->(_o) { p::Mailinator.generate_email("m8r.davidfuhr.de", "m8r-davidfuhr-de") },
579
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
580
+ },
581
+ "m8r-mcasal-com" => {
582
+ generate: ->(_o) { p::Mailinator.generate_email("m8r.mcasal.com", "m8r-mcasal-com") },
583
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
584
+ },
585
+ "mail-bentrask-com" => {
586
+ generate: ->(_o) { p::Mailinator.generate_email("mail.bentrask.com", "mail-bentrask-com") },
587
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
588
+ },
589
+ "mail-fsmash-org" => {
590
+ generate: ->(_o) { p::Mailinator.generate_email("mail.fsmash.org", "mail-fsmash-org") },
591
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
592
+ },
593
+ "mailinatorzz-mooo-com" => {
594
+ generate: ->(_o) { p::Mailinator.generate_email("mailinatorzz.mooo.com", "mailinatorzz-mooo-com") },
595
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
596
+ },
597
+ "mi-meon-be" => {
598
+ generate: ->(_o) { p::Mailinator.generate_email("mi.meon.be", "mi-meon-be") },
599
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
600
+ },
601
+ "mn-curppa-com" => {
602
+ generate: ->(_o) { p::Mailinator.generate_email("mn.curppa.com", "mn-curppa-com") },
603
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
604
+ },
605
+ "m-nik-me" => {
606
+ generate: ->(_o) { p::Mailinator.generate_email("m.nik.me", "m-nik-me") },
607
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
608
+ },
609
+ "mtmdev-com" => {
610
+ generate: ->(_o) { p::Mailinator.generate_email("mtmdev.com", "mtmdev-com") },
611
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
612
+ },
613
+ "nospam-thurstons-us" => {
614
+ generate: ->(_o) { p::Mailinator.generate_email("nospam.thurstons.us", "nospam-thurstons-us") },
615
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
616
+ },
617
+ "notfond-404-mn" => {
618
+ generate: ->(_o) { p::Mailinator.generate_email("notfond.404.mn", "notfond-404-mn") },
619
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
620
+ },
621
+ "null-k3vin-net" => {
622
+ generate: ->(_o) { p::Mailinator.generate_email("null.k3vin.net", "null-k3vin-net") },
623
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
624
+ },
625
+ "ramjane-mooo-com" => {
626
+ generate: ->(_o) { p::Mailinator.generate_email("ramjane.mooo.com", "ramjane-mooo-com") },
627
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
628
+ },
629
+ "rauxa-seny-cat" => {
630
+ generate: ->(_o) { p::Mailinator.generate_email("rauxa.seny.cat", "rauxa-seny-cat") },
631
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
632
+ },
633
+ "really-istrash-com" => {
634
+ generate: ->(_o) { p::Mailinator.generate_email("really.istrash.com", "really-istrash-com") },
635
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
636
+ },
637
+ "spam-hortuk-ovh" => {
638
+ generate: ->(_o) { p::Mailinator.generate_email("spam.hortuk.ovh", "spam-hortuk-ovh") },
639
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
640
+ },
641
+ "sp-woot-at" => {
642
+ generate: ->(_o) { p::Mailinator.generate_email("sp.woot.at", "sp-woot-at") },
643
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
644
+ },
645
+ "test-unergie-com" => {
646
+ generate: ->(_o) { p::Mailinator.generate_email("test.unergie.com", "test-unergie-com") },
647
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
648
+ },
649
+ "torch-yi-org" => {
650
+ generate: ->(_o) { p::Mailinator.generate_email("torch.yi.org", "torch-yi-org") },
651
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
652
+ },
653
+ "t-zibet-net" => {
654
+ generate: ->(_o) { p::Mailinator.generate_email("t.zibet.net", "t-zibet-net") },
655
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
656
+ },
657
+ "sogetthis-com" => {
658
+ generate: ->(_o) { p::Mailinator.generate_email("sogetthis.com", "sogetthis-com") },
659
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
660
+ },
661
+ "bobmail-info" => {
662
+ generate: ->(_o) { p::Mailinator.generate_email("bobmail.info", "bobmail-info") },
663
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
664
+ },
665
+ "suremail-info" => {
666
+ generate: ->(_o) { p::Mailinator.generate_email("suremail.info", "suremail-info") },
667
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
668
+ },
669
+ "binkmail-com" => {
670
+ generate: ->(_o) { p::Mailinator.generate_email("binkmail.com", "binkmail-com") },
671
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
672
+ },
673
+ "veryrealemail-com" => {
674
+ generate: ->(_o) { p::Mailinator.generate_email("veryrealemail.com", "veryrealemail-com") },
675
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
676
+ },
677
+ "chammy-info" => {
678
+ generate: ->(_o) { p::Mailinator.generate_email("chammy.info", "chammy-info") },
679
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
680
+ },
681
+ "thisisnotmyrealemail-com" => {
682
+ generate: ->(_o) { p::Mailinator.generate_email("thisisnotmyrealemail.com", "thisisnotmyrealemail-com") },
683
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
684
+ },
685
+ "notmailinator-com" => {
686
+ generate: ->(_o) { p::Mailinator.generate_email("notmailinator.com", "notmailinator-com") },
687
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
688
+ },
689
+ "spamhereplease-com" => {
690
+ generate: ->(_o) { p::Mailinator.generate_email("spamhereplease.com", "spamhereplease-com") },
691
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
692
+ },
693
+ "sendspamhere-com" => {
694
+ generate: ->(_o) { p::Mailinator.generate_email("sendspamhere.com", "sendspamhere-com") },
695
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
696
+ },
697
+ "sendfree-org" => {
698
+ generate: ->(_o) { p::Mailinator.generate_email("sendfree.org", "sendfree-org") },
699
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
700
+ },
701
+ "junk-beats-org" => {
702
+ generate: ->(_o) { p::Mailinator.generate_email("junk.beats.org", "junk-beats-org") },
703
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
704
+ },
705
+ "junk-ihmehl-com" => {
706
+ generate: ->(_o) { p::Mailinator.generate_email("junk.ihmehl.com", "junk-ihmehl-com") },
707
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
708
+ },
709
+ "junk-noplay-org" => {
710
+ generate: ->(_o) { p::Mailinator.generate_email("junk.noplay.org", "junk-noplay-org") },
711
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
712
+ },
713
+ "junk-vanillasystem-com" => {
714
+ generate: ->(_o) { p::Mailinator.generate_email("junk.vanillasystem.com", "junk-vanillasystem-com") },
715
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
716
+ },
717
+ "spam-jasonpearce-com" => {
718
+ generate: ->(_o) { p::Mailinator.generate_email("spam.jasonpearce.com", "spam-jasonpearce-com") },
719
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
720
+ },
721
+ "fish-skytale-net" => {
722
+ generate: ->(_o) { p::Mailinator.generate_email("fish.skytale.net", "fish-skytale-net") },
723
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
724
+ },
725
+ "spam-mccrew-com" => {
726
+ generate: ->(_o) { p::Mailinator.generate_email("spam.mccrew.com", "spam-mccrew-com") },
727
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
728
+ },
729
+ "spam-coroiu-com" => {
730
+ generate: ->(_o) { p::Mailinator.generate_email("spam.coroiu.com", "spam-coroiu-com") },
731
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
732
+ },
733
+ "spam-deluser-net" => {
734
+ generate: ->(_o) { p::Mailinator.generate_email("spam.deluser.net", "spam-deluser-net") },
735
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
736
+ },
737
+ "spam-dhsf-net" => {
738
+ generate: ->(_o) { p::Mailinator.generate_email("spam.dhsf.net", "spam-dhsf-net") },
739
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
740
+ },
741
+ "spam-lucatnt-com" => {
742
+ generate: ->(_o) { p::Mailinator.generate_email("spam.lucatnt.com", "spam-lucatnt-com") },
743
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
744
+ },
745
+ "spam-lyceum-life-com-ru" => {
746
+ generate: ->(_o) { p::Mailinator.generate_email("spam.lyceum-life.com.ru", "spam-lyceum-life-com-ru") },
747
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
748
+ },
749
+ "spam-netpirates-net" => {
750
+ generate: ->(_o) { p::Mailinator.generate_email("spam.netpirates.net", "spam-netpirates-net") },
751
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
752
+ },
753
+ "spam-no-ip-net" => {
754
+ generate: ->(_o) { p::Mailinator.generate_email("spam.no-ip.net", "spam-no-ip-net") },
755
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
756
+ },
757
+ "spam-ozh-org" => {
758
+ generate: ->(_o) { p::Mailinator.generate_email("spam.ozh.org", "spam-ozh-org") },
759
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
760
+ },
761
+ "spam-pyphus-org" => {
762
+ generate: ->(_o) { p::Mailinator.generate_email("spam.pyphus.org", "spam-pyphus-org") },
763
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
764
+ },
765
+ "spam-shep-pw" => {
766
+ generate: ->(_o) { p::Mailinator.generate_email("spam.shep.pw", "spam-shep-pw") },
767
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
768
+ },
769
+ "spam-wtf-at" => {
770
+ generate: ->(_o) { p::Mailinator.generate_email("spam.wtf.at", "spam-wtf-at") },
771
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
772
+ },
773
+ "spam-wulczer-org" => {
774
+ generate: ->(_o) { p::Mailinator.generate_email("spam.wulczer.org", "spam-wulczer-org") },
775
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
776
+ },
777
+ "crap-kakadua-net" => {
778
+ generate: ->(_o) { p::Mailinator.generate_email("crap.kakadua.net", "crap-kakadua-net") },
779
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
780
+ },
781
+ "spam-janlugt-nl" => {
782
+ generate: ->(_o) { p::Mailinator.generate_email("spam.janlugt.nl", "spam-janlugt-nl") },
783
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
784
+ },
785
+ "min-burningfish-net" => {
786
+ generate: ->(_o) { p::Mailinator.generate_email("min.burningfish.net", "min-burningfish-net") },
787
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
788
+ },
789
+ "sink-fblay-com" => {
790
+ generate: ->(_o) { p::Mailinator.generate_email("sink.fblay.com", "sink-fblay-com") },
791
+ get_emails: ->(e, t) { p::Mailinator.get_emails(t.to_s, e) }
792
+ },
793
+ # catchmail 家族:主渠道随机域名,别名用固定域名
794
+ "catchmail" => {
795
+ generate: ->(o) { p::Catchmail.generate_email(o.domain) },
796
+ get_emails: ->(e, _t) { p::Catchmail.get_emails(e) }
797
+ },
798
+ "catchmail-mailistry" => {
799
+ generate: ->(_o) { with_channel(p::Catchmail.generate_email("mailistry.com"), "catchmail-mailistry") },
800
+ get_emails: ->(e, _t) { p::Catchmail.get_emails(e) }
801
+ },
802
+ "catchmail-zeppost" => {
803
+ generate: ->(_o) { with_channel(p::Catchmail.generate_email("zeppost.com"), "catchmail-zeppost") },
804
+ get_emails: ->(e, _t) { p::Catchmail.get_emails(e) }
805
+ },
806
+ # mailforspam 家族:主渠道随机域名,别名用固定域名
807
+ "mailforspam" => {
808
+ generate: ->(o) { p::Mailforspam.generate_email(o.domain) },
809
+ get_emails: ->(e, _t) { p::Mailforspam.get_emails(e) }
810
+ },
811
+ "mailforspam-tempmail-io" => {
812
+ generate: ->(_o) { with_channel(p::Mailforspam.generate_email("tempmail.io"), "mailforspam-tempmail-io") },
813
+ get_emails: ->(e, _t) { p::Mailforspam.get_emails(e) }
814
+ },
815
+ "mailforspam-disposable" => {
816
+ generate: ->(_o) { with_channel(p::Mailforspam.generate_email("disposable.email"), "mailforspam-disposable") },
817
+ get_emails: ->(e, _t) { p::Mailforspam.get_emails(e) }
818
+ },
819
+ # fake-legal 家族:主渠道随机域名,别名用 POST 自定义域
820
+ "fake-legal" => {
821
+ generate: ->(o) { p::FakeLegal.generate_email(o.domain) },
822
+ get_emails: ->(e, _t) { p::FakeLegal.get_emails(e) }
823
+ },
824
+ "imgui-de" => {
825
+ generate: ->(_o) { p::FakeLegal.generate_email("imgui.de", "imgui-de") },
826
+ get_emails: ->(e, _t) { p::FakeLegal.get_emails(e) }
827
+ },
828
+ "pulsewebmenu-de" => {
829
+ generate: ->(_o) { p::FakeLegal.generate_email("pulsewebmenu.de", "pulsewebmenu-de") },
830
+ get_emails: ->(e, _t) { p::FakeLegal.get_emails(e) }
831
+ },
832
+ # 10minute-one 家族:主渠道从 SSR 获取 JWT + 域名池,别名用固定域名
833
+ "10minute-one" => {
834
+ generate: ->(o) { p::TenminuteOne.generate_email(o.domain) },
835
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
836
+ },
837
+ "xghff-com" => {
838
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("xghff.com"), "xghff-com") },
839
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
840
+ },
841
+ "oqqaj-com" => {
842
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("oqqaj.com"), "oqqaj-com") },
843
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
844
+ },
845
+ "psovv-com" => {
846
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("psovv.com"), "psovv-com") },
847
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
848
+ },
849
+ "dbwot-com" => {
850
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("dbwot.com"), "dbwot-com") },
851
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
852
+ },
853
+ "ygwpr-com" => {
854
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("ygwpr.com"), "ygwpr-com") },
855
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
856
+ },
857
+ "imxwe-com" => {
858
+ generate: ->(_o) { with_channel(p::TenminuteOne.generate_email("imxwe.com"), "imxwe-com") },
859
+ get_emails: ->(e, t) { p::TenminuteOne.get_emails(e, require_token(t, "10minute-one")) }
860
+ },
861
+ # zhujump 家族:通过注册账号、登录后创建邮箱
862
+ "jqkjqk-xyz" => {
863
+ generate: ->(_o) { p::Zhujump.generate_email("jqkjqk.xyz", "jqkjqk-xyz") },
864
+ get_emails: ->(e, t) { p::Zhujump.get_emails(require_token(t, "jqkjqk-xyz"), e) }
865
+ },
866
+ "lyhlevi-com" => {
867
+ generate: ->(_o) { p::Zhujump.generate_email_for_instance("https://lyhlevi.com", "lyhlevi.com", "lyhlevi-com", 24 * 60 * 60 * 1000) },
868
+ get_emails: ->(e, t) { p::Zhujump.get_emails(require_token(t, "lyhlevi-com"), e) }
869
+ },
870
+ # shard-10-independent-simple-a 渠道绑定
871
+ "anonymmail" => {
872
+ generate: ->(_o) { p::Anonymmail.generate_email },
873
+ get_emails: ->(e, _t) { p::Anonymmail.get_emails(e) }
874
+ },
875
+ "byom" => {
876
+ generate: ->(_o) { p::Byom.generate_email },
877
+ get_emails: ->(e, _t) { p::Byom.get_emails(e) }
878
+ },
879
+ "cleantempmail" => {
880
+ generate: ->(_o) { p::Cleantempmail.generate_email },
881
+ get_emails: ->(e, _t) { p::Cleantempmail.get_emails(e) }
882
+ },
883
+ "devmail-uk" => {
884
+ generate: ->(_o) { p::DevmailUk.generate_email },
885
+ get_emails: ->(e, _t) { p::DevmailUk.get_emails(e) }
886
+ },
887
+ "dropmail-click" => {
888
+ generate: ->(_o) { p::DropmailClick.generate_email },
889
+ get_emails: ->(e, t) { p::DropmailClick.get_emails(t.to_s.empty? ? e : t) }
890
+ },
891
+ "fake-email-site" => {
892
+ generate: ->(_o) { p::FakeEmailSite.generate_email },
893
+ get_emails: ->(e, _t) { p::FakeEmailSite.get_emails(e) }
894
+ },
895
+ "fmail" => {
896
+ generate: ->(o) { p::Fmail.generate_email(o.domain) },
897
+ get_emails: ->(e, _t) { p::Fmail.get_emails(e) }
898
+ },
899
+ "freecustom" => {
900
+ generate: ->(_o) { p::Freecustom.generate_email },
901
+ get_emails: ->(e, t) { p::Freecustom.get_emails(t.to_s.empty? ? e : t) }
902
+ },
903
+ "gonebox-email" => {
904
+ generate: ->(_o) { p::GoneboxEmail.generate_email },
905
+ get_emails: ->(e, t) { p::GoneboxEmail.get_emails(t.to_s, e) }
906
+ },
907
+ "harakirimail" => {
908
+ generate: ->(_o) { p::Harakirimail.generate_email },
909
+ get_emails: ->(e, _t) { p::Harakirimail.get_emails(e) }
910
+ },
911
+ "inboxes" => {
912
+ generate: ->(o) { p::Inboxes.generate_email(o.domain) },
913
+ get_emails: ->(e, _t) { p::Inboxes.get_emails(e) }
914
+ },
915
+ "m2u" => {
916
+ generate: ->(_o) { p::M2u.generate_email },
917
+ get_emails: ->(e, t) { p::M2u.get_emails(t.to_s, e) }
918
+ },
919
+ "mail10s" => {
920
+ generate: ->(_o) { p::Mail10s.generate_email },
921
+ get_emails: ->(e, _t) { p::Mail10s.get_emails(e) }
922
+ },
923
+ "mail123" => {
924
+ generate: ->(_o) { p::Mail123.generate_email },
925
+ get_emails: ->(e, _t) { p::Mail123.get_emails(e) }
926
+ },
927
+ # shard-11-independent-simple-b 渠道绑定
928
+ "mffac" => {
929
+ generate: ->(_o) { p::Mffac.generate_email },
930
+ get_emails: ->(e, t) { p::Mffac.get_emails(e, t || "") }
931
+ },
932
+ "tempmailc" => {
933
+ generate: ->(_o) { p::Tempmailc.generate_email },
934
+ get_emails: ->(e, _t) { p::Tempmailc.get_emails(e) }
935
+ },
936
+ "neighbours-sh" => {
937
+ generate: ->(_o) { p::NeighboursSh.generate_email },
938
+ get_emails: ->(e, _t) { p::NeighboursSh.get_emails(e) }
939
+ },
940
+ "temporam" => {
941
+ generate: ->(o) { p::Temporam.generate_email(o.domain) },
942
+ get_emails: ->(e, t) { p::Temporam.get_emails(t, e) }
943
+ },
944
+ "neighbours" => {
945
+ generate: ->(o) { p::Neighbours.generate_email(o.domain) },
946
+ get_emails: ->(e, _t) { p::Neighbours.get_emails(e) }
947
+ },
948
+ "tempy-email" => {
949
+ generate: ->(o) { p::TempyEmail.generate_email(o.domain) },
950
+ get_emails: ->(e, _t) { p::TempyEmail.get_emails(e) }
951
+ },
952
+ "ockito" => {
953
+ generate: ->(_o) { p::Ockito.generate_email },
954
+ get_emails: ->(e, t) { p::Ockito.get_emails(require_token(t, "ockito"), e) }
955
+ },
956
+ "tempmail365" => {
957
+ generate: ->(o) { p::Tempmail365.generate_email(o.domain) },
958
+ get_emails: ->(e, _t) { p::Tempmail365.get_emails(e) }
959
+ },
960
+ "tempinbox" => {
961
+ generate: ->(o) { p::Tempinbox.generate_email(o.domain) },
962
+ get_emails: ->(e, _t) { p::Tempinbox.get_emails(e) }
963
+ },
964
+ "mail-sunls" => {
965
+ generate: ->(_o) { p::MailSunls.generate_email },
966
+ get_emails: ->(e, _t) { p::MailSunls.get_emails(e) }
967
+ },
968
+ "smailpro" => {
969
+ generate: ->(_o) { p::Smailpro.generate_email },
970
+ get_emails: ->(e, t) { p::Smailpro.get_emails(e, t || "") }
971
+ },
972
+ "mailhole-de" => {
973
+ generate: ->(_o) { p::MailholeDe.generate_email },
974
+ get_emails: ->(e, t) { p::MailholeDe.get_emails(t || e) }
975
+ },
976
+ "nimail" => {
977
+ generate: ->(_o) { p::Nimail.generate_email },
978
+ get_emails: ->(e, t) { p::Nimail.get_emails(t || e) }
979
+ },
980
+ # shard-09-independent-session-b 渠道绑定
981
+ "rootsh" => {
982
+ generate: ->(o) { p::Rootsh.generate_email(o.domain) },
983
+ get_emails: ->(e, t) { p::Rootsh.get_emails(require_token(t, "rootsh"), e) }
984
+ },
985
+ "shitty-email" => {
986
+ generate: ->(_o) { p::ShittyEmail.generate_email },
987
+ get_emails: ->(e, t) { p::ShittyEmail.get_emails(require_token(t, "shitty-email"), e) }
988
+ },
989
+ "ta-easy" => {
990
+ generate: ->(_o) { p::TaEasy.generate_email },
991
+ get_emails: ->(e, t) { p::TaEasy.get_emails(e, require_token(t, "ta-easy")) }
992
+ },
993
+ "temp-mail-now" => {
994
+ generate: ->(_o) { p::TempMailNow.generate_email },
995
+ get_emails: ->(e, t) { p::TempMailNow.get_emails(require_token(t, "temp-mail-now"), e) }
996
+ },
997
+ "temp-mail-org" => {
998
+ generate: ->(_o) { p::TempMailOrg.generate_email },
999
+ get_emails: ->(e, t) { p::TempMailOrg.get_emails(require_token(t, "temp-mail-org"), e) }
1000
+ },
1001
+ "tempemail-co" => {
1002
+ generate: ->(_o) { p::TempemailCo.generate_email },
1003
+ get_emails: ->(e, t) { p::TempemailCo.get_emails(e, require_token(t, "tempemail-co")) }
1004
+ },
1005
+ "tempemail-info" => {
1006
+ generate: ->(_o) { p::TempemailInfo.generate_email },
1007
+ get_emails: ->(e, t) { p::TempemailInfo.get_emails(e, require_token(t, "tempemail-info")) }
1008
+ },
1009
+ "tempemails-net" => {
1010
+ generate: ->(_o) { p::TempemailsNet.generate_email },
1011
+ get_emails: ->(e, t) { p::TempemailsNet.get_emails(e, require_token(t, "tempemails-net")) }
1012
+ },
1013
+ "tempfastmail" => {
1014
+ generate: ->(_o) { p::Tempfastmail.generate_email },
1015
+ get_emails: ->(e, t) { p::Tempfastmail.get_emails(require_token(t, "tempfastmail"), e) }
1016
+ },
1017
+ "tempgmailer" => {
1018
+ generate: ->(_o) { p::Tempgmailer.generate_email },
1019
+ get_emails: ->(e, t) { p::Tempgmailer.get_emails(require_token(t, "tempgmailer"), e) }
1020
+ },
1021
+ "tempgo-email" => {
1022
+ generate: ->(_o) { p::TempgoEmail.generate_email },
1023
+ get_emails: ->(e, t) { p::TempgoEmail.get_emails(require_token(t, "tempgo-email"), e) }
1024
+ },
1025
+ "tempmail-fish" => {
1026
+ generate: ->(_o) { p::TempmailFish.generate_email },
1027
+ get_emails: ->(e, t) { p::TempmailFish.get_emails(require_token(t, "tempmail-fish"), e) }
1028
+ },
1029
+ "tempmail-fyi" => {
1030
+ generate: ->(_o) { p::TempmailFyi.generate_email },
1031
+ get_emails: ->(e, t) { p::TempmailFyi.get_emails(e, require_token(t, "tempmail-fyi")) }
1032
+ },
1033
+ "tempmail-lol-v2" => {
1034
+ generate: ->(_o) { p::TempmailLolV2.generate_email },
1035
+ get_emails: ->(e, t) { p::TempmailLolV2.get_emails(require_token(t, "tempmail-lol-v2"), e) }
1036
+ },
1037
+ "tempmailpro" => {
1038
+ generate: ->(_o) { p::Tempmailpro.generate_email },
1039
+ get_emails: ->(e, t) { p::Tempmailpro.get_emails(require_token(t, "tempmailpro"), e) }
1040
+ },
1041
+ "tempmailten" => {
1042
+ generate: ->(_o) { p::Tempmailten.generate_email },
1043
+ get_emails: ->(e, t) { p::Tempmailten.get_emails(e, require_token(t, "tempmailten")) }
1044
+ },
1045
+ "tempp-mails" => {
1046
+ generate: ->(_o) { p::TempMails.generate_email },
1047
+ get_emails: ->(e, t) { p::TempMails.get_emails(e, require_token(t, "tempp-mails")) }
1048
+ },
1049
+ "ten-minute-mail-net" => {
1050
+ generate: ->(_o) { p::TenMinuteMailNet.generate_email },
1051
+ get_emails: ->(e, t) { p::TenMinuteMailNet.get_emails(require_token(t, "ten-minute-mail-net"), e) }
1052
+ },
1053
+ "throwawaymail" => {
1054
+ generate: ->(_o) { p::Throwawaymail.generate_email },
1055
+ get_emails: ->(e, t) { p::Throwawaymail.get_emails(require_token(t, "throwawaymail"), e) }
1056
+ },
1057
+ "tmail-link" => {
1058
+ generate: ->(_o) { p::TmailLink.generate_email },
1059
+ get_emails: ->(e, t) { p::TmailLink.get_emails(e, require_token(t, "tmail-link")) }
1060
+ },
1061
+ "uncorreotemporal" => {
1062
+ generate: ->(_o) { p::Uncorreotemporal.generate_email },
1063
+ get_emails: ->(e, t) { p::Uncorreotemporal.get_emails(require_token(t, "uncorreotemporal"), e) }
1064
+ },
1065
+ "webmailtemp" => {
1066
+ generate: ->(_o) { p::Webmailtemp.generate_email },
1067
+ get_emails: ->(e, t) { p::Webmailtemp.get_emails(require_token(t, "webmailtemp"), e) }
1068
+ },
1069
+ "xkx-me" => {
1070
+ generate: ->(_o) { p::XkxMe.generate_email },
1071
+ get_emails: ->(e, t) { p::XkxMe.get_emails(require_token(t, "xkx-me"), e) }
1072
+ },
1073
+ }
1074
+ end
1075
+
1076
+ # 依据有序渠道元数据构建注册表:有真实实现用真实实现,否则注册桩。
1077
+ # 顺序严格遵循 CHANNEL_DATA(= baseline),为硬约束。
1078
+ def build!
1079
+ return unless REGISTRY.empty?
1080
+
1081
+ impls = real_implementations
1082
+ CHANNEL_DATA.each do |slug, name, website|
1083
+ impl = impls[slug]
1084
+ spec = if impl
1085
+ ChannelSpec.new(channel: slug, name: name, website: website,
1086
+ generate: impl[:generate], get_emails: impl[:get_emails])
1087
+ else
1088
+ stub_spec(slug, name, website)
1089
+ end
1090
+ register_channel(spec)
1091
+ end
1092
+ end
1093
+ end
1094
+
1095
+ # 加载时立即构建注册表
1096
+ Registry.build!
1097
+ end