tempmail_sdk 1.3.4 → 1.3.6
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/tempmail_sdk/channels.rb +52 -27
- data/lib/tempmail_sdk/channels_data.rb +52 -27
- data/lib/tempmail_sdk/providers/clawdemail.rb +122 -0
- data/lib/tempmail_sdk/providers/crazymailing.rb +114 -0
- data/lib/tempmail_sdk/providers/duckmail.rb +9 -2
- data/lib/tempmail_sdk/providers/firetempmail.rb +86 -0
- data/lib/tempmail_sdk/providers/flybymail.rb +93 -0
- data/lib/tempmail_sdk/providers/generator_email.rb +146 -0
- data/lib/tempmail_sdk/providers/huskmail.rb +132 -0
- data/lib/tempmail_sdk/providers/internxt.rb +176 -0
- data/lib/tempmail_sdk/providers/linshi_xyz.rb +79 -0
- data/lib/tempmail_sdk/providers/mail_tm.rb +9 -2
- data/lib/tempmail_sdk/providers/mailmomy.rb +1 -1
- data/lib/tempmail_sdk/providers/mailticking.rb +139 -0
- data/lib/tempmail_sdk/providers/mtempmail.rb +140 -0
- data/lib/tempmail_sdk/providers/nowtempmail.rb +112 -0
- data/lib/tempmail_sdk/providers/noxen_de5_net.rb +392 -0
- data/lib/tempmail_sdk/providers/nukemail.rb +188 -0
- data/lib/tempmail_sdk/providers/nullmail.rb +95 -0
- data/lib/tempmail_sdk/providers/shadowmail.rb +174 -0
- data/lib/tempmail_sdk/providers/shitpost_email.rb +85 -0
- data/lib/tempmail_sdk/providers/smails.rb +128 -0
- data/lib/tempmail_sdk/providers/temp_mail_gg.rb +362 -0
- data/lib/tempmail_sdk/providers/tempmail100.rb +148 -0
- data/lib/tempmail_sdk/providers/tempmail_ee.rb +373 -0
- data/lib/tempmail_sdk/providers/tempmailportal.rb +131 -0
- data/lib/tempmail_sdk/providers/tempmails_io.rb +89 -0
- data/lib/tempmail_sdk/providers/tempmailto.rb +312 -0
- data/lib/tempmail_sdk/providers/temporarymail_com.rb +184 -0
- data/lib/tempmail_sdk/providers/tenmin_app.rb +100 -0
- data/lib/tempmail_sdk/providers/thirty_min_email.rb +90 -0
- data/lib/tempmail_sdk/providers/tmpkit.rb +129 -0
- data/lib/tempmail_sdk/providers/zerodrop.rb +90 -0
- data/lib/tempmail_sdk/registry.rb +223 -107
- data/lib/tempmail_sdk/types.rb +13 -0
- data/lib/tempmail_sdk/version.rb +1 -1
- data/lib/tempmail_sdk.rb +1 -1
- metadata +31 -7
- data/lib/tempmail_sdk/providers/gonebox_email.rb +0 -89
- data/lib/tempmail_sdk/providers/mohmal.rb +0 -208
- data/lib/tempmail_sdk/providers/temp_mail_now.rb +0 -103
- data/lib/tempmail_sdk/providers/webmailtemp.rb +0 -108
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ce354c565d41b72b8747b7c8e4d6fe460cb79d9ce35f0ab9d580d85707862848
|
|
4
|
+
data.tar.gz: 271328d1244cc3f509595d47ac63f82c91b9a24b0c3f6ff0c7b83b41ba33a76a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8f1efda85071b81ebff4e2c3a1b7f6154902a3cbbbcb179d0405f834df30ff7226b18426eeeac47900546c954bc5469ce4a62169ff34ada3d3e038bba2a43734
|
|
7
|
+
data.tar.gz: 801518603c4bbad61769e106b942a8a15996993d593bc6c075ab7a1aaebc85ae6372cb57e3915103a740742ad8eaff3aacd6500b942cbd3f964918040523532f
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
4
4
|
|
|
5
|
-
Ruby 语言临时邮箱 SDK,公开 **
|
|
5
|
+
Ruby 语言临时邮箱 SDK,公开 **304** 个 `channel` 渠道标识,聚合 100+ 个第三方临时邮箱服务商,所有渠道返回**统一标准化格式**。渠道标识与顺序与 Go / npm / Rust / Python / C 等其余各端保持一致(十端同步);随机生成邮箱时在本端独立打乱尝试顺序。
|
|
6
6
|
|
|
7
7
|
## 安装
|
|
8
8
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
#
|
|
3
|
-
# 渠道标识常量模块(
|
|
3
|
+
# 渠道标识常量模块(290 个),常量值即渠道 slug。
|
|
4
4
|
# 由 .channel_meta.json 生成,供用户以常量方式引用渠道,避免手写字符串出错。
|
|
5
5
|
#
|
|
6
6
|
module TempmailSdk
|
|
@@ -17,7 +17,6 @@ module TempmailSdk
|
|
|
17
17
|
YGWPR_COM = "ygwpr-com"
|
|
18
18
|
IMXWE_COM = "imxwe-com"
|
|
19
19
|
LINSHIYOU = "linshiyou"
|
|
20
|
-
MFFAC = "mffac"
|
|
21
20
|
TEMPMAIL_LOL = "tempmail-lol"
|
|
22
21
|
CHATGPT_ORG_UK = "chatgpt-org-uk"
|
|
23
22
|
TEMP_MAIL_IO = "temp-mail-io"
|
|
@@ -31,6 +30,7 @@ module TempmailSdk
|
|
|
31
30
|
MAILFORSPAM_DISPOSABLE = "mailforspam-disposable"
|
|
32
31
|
TEMPMAILC = "tempmailc"
|
|
33
32
|
MAILNESIA = "mailnesia"
|
|
33
|
+
MAILTICKING = "mailticking"
|
|
34
34
|
THROWAWAYMAIL = "throwawaymail"
|
|
35
35
|
TEMPMAIL_FISH = "tempmail-fish"
|
|
36
36
|
NEIGHBOURS_SH = "neighbours-sh"
|
|
@@ -52,35 +52,18 @@ module TempmailSdk
|
|
|
52
52
|
GETNADA_NET = "getnada-net"
|
|
53
53
|
JAWATENGAH_NET = "jawatengah-net"
|
|
54
54
|
JAWATIMUR_NET = "jawatimur-net"
|
|
55
|
-
KALIMANTANBARAT_NET = "kalimantanbarat-net"
|
|
56
|
-
KALIMANTANSELATAN_NET = "kalimantanselatan-net"
|
|
57
|
-
KALIMANTANTENGAH_NET = "kalimantantengah-net"
|
|
58
55
|
KALIMANTANTIMUR_NET = "kalimantantimur-net"
|
|
59
|
-
KALIMANTANUTARA_NET = "kalimantanutara-net"
|
|
60
|
-
KEPULAUANRIAU_NET = "kepulauanriau-net"
|
|
61
56
|
LUXURY345_COM = "luxury345-com"
|
|
62
|
-
MALUKUUTARA_NET = "malukuutara-net"
|
|
63
|
-
NUSATENGGARABARAT_NET = "nusatenggarabarat-net"
|
|
64
|
-
NUSATENGGARATIMUR_NET = "nusatenggaratimur-net"
|
|
65
|
-
PAPUABARAT_NET = "papuabarat-net"
|
|
66
|
-
PAPUABARATDAYA_NET = "papuabaratdaya-net"
|
|
67
|
-
PAPUASELATAN_NET = "papuaselatan-net"
|
|
68
57
|
PEHOL_COM = "pehol-com"
|
|
69
58
|
PTRUYEN_COM = "ptruyen-com"
|
|
70
|
-
PULAUBALI_NET = "pulaubali-net"
|
|
71
59
|
RIAU_NET = "riau-net"
|
|
72
60
|
SEOKEY_ORG = "seokey-org"
|
|
73
|
-
SULAWESIBARAT_NET = "sulawesibarat-net"
|
|
74
61
|
SULAWESISELATAN_NET = "sulawesiselatan-net"
|
|
75
|
-
SULAWESITENGAH_NET = "sulawesitengah-net"
|
|
76
|
-
SULAWESITENGGARA_NET = "sulawesitenggara-net"
|
|
77
62
|
SUMATERABARAT_NET = "sumaterabarat-net"
|
|
78
|
-
SUMATERASELATAN_NET = "sumateraselatan-net"
|
|
79
63
|
SUMATERAUTARA_NET = "sumaterautara-net"
|
|
80
64
|
VILLATOGEL_COM = "villatogel-com"
|
|
81
65
|
MAIL123 = "mail123"
|
|
82
66
|
MAIL10S = "mail10s"
|
|
83
|
-
WEBMAILTEMP = "webmailtemp"
|
|
84
67
|
TEMPFASTMAIL = "tempfastmail"
|
|
85
68
|
C_1SEC_MAIL = "1sec-mail"
|
|
86
69
|
FAKEMAIL = "fakemail"
|
|
@@ -115,7 +98,6 @@ module TempmailSdk
|
|
|
115
98
|
TMAIL_WS = "tmail-ws"
|
|
116
99
|
BAREED_WS = "bareed-ws"
|
|
117
100
|
EMAIL10MIN = "email10min"
|
|
118
|
-
MJJ_CM = "mjj-cm"
|
|
119
101
|
LINSHI_CO = "linshi-co"
|
|
120
102
|
HARAKIRIMAIL = "harakirimail"
|
|
121
103
|
JQKJQK_XYZ = "jqkjqk-xyz"
|
|
@@ -144,7 +126,6 @@ module TempmailSdk
|
|
|
144
126
|
GUERRILLAMAIL_ORG = "guerrillamail-org"
|
|
145
127
|
GUERRILLAMAILBLOCK = "guerrillamailblock"
|
|
146
128
|
GUERRILLAMAIL_COM_WWW = "guerrillamail-com-www"
|
|
147
|
-
M2U = "m2u"
|
|
148
129
|
TEMPY_EMAIL = "tempy-email"
|
|
149
130
|
FMAIL = "fmail"
|
|
150
131
|
OCKITO = "ockito"
|
|
@@ -162,7 +143,6 @@ module TempmailSdk
|
|
|
162
143
|
HARIBU = "haribu"
|
|
163
144
|
ROOTSH = "rootsh"
|
|
164
145
|
FAKE_EMAIL_SITE = "fake-email-site"
|
|
165
|
-
MOHMAL = "mohmal"
|
|
166
146
|
MAILGOLEM = "mailgolem"
|
|
167
147
|
BEST_TEMP_MAIL = "best-temp-mail"
|
|
168
148
|
DISPOSABLEMAIL_APP = "disposablemail-app"
|
|
@@ -170,7 +150,6 @@ module TempmailSdk
|
|
|
170
150
|
MINUTEINBOX = "minuteinbox"
|
|
171
151
|
MAILCATCH = "mailcatch"
|
|
172
152
|
TEMPEMAIL_CO = "tempemail-co"
|
|
173
|
-
TEMPEMAILS_NET = "tempemails-net"
|
|
174
153
|
ALTMAILS = "altmails"
|
|
175
154
|
TEMPEMAIL_INFO = "tempemail-info"
|
|
176
155
|
SMAILPRO = "smailpro"
|
|
@@ -183,14 +162,12 @@ module TempmailSdk
|
|
|
183
162
|
TEMPP_MAILS = "tempp-mails"
|
|
184
163
|
EMAILTEMP_ORG = "emailtemp-org"
|
|
185
164
|
MYTEMPMAIL_CC = "mytempmail-cc"
|
|
186
|
-
TEMP_MAIL_NOW = "temp-mail-now"
|
|
187
165
|
MAIL_TD = "mail-td"
|
|
188
166
|
MAILHOLE_DE = "mailhole-de"
|
|
189
167
|
TMAIL_LINK = "tmail-link"
|
|
190
168
|
C_24MAIL_CHACUO = "24mail-chacuo"
|
|
191
169
|
NIMAIL = "nimail"
|
|
192
170
|
FREECUSTOM = "freecustom"
|
|
193
|
-
C_16888888_CYOU = "16888888-cyou"
|
|
194
171
|
C_17666688_SHOP = "17666688-shop"
|
|
195
172
|
C_282MAIL_COM = "282mail-com"
|
|
196
173
|
BLACKHOLE_DJURBY_SE = "blackhole-djurby-se"
|
|
@@ -205,7 +182,6 @@ module TempmailSdk
|
|
|
205
182
|
EASYME_PRO = "easyme-pro"
|
|
206
183
|
EBS_COM_AR = "ebs-com-ar"
|
|
207
184
|
ETGDEV_DE = "etgdev-de"
|
|
208
|
-
EVERGREENCO_SHOP = "evergreenco-shop"
|
|
209
185
|
FWD2M_ESZETT_ES = "fwd2m-eszett-es"
|
|
210
186
|
JAMA_TRENET_EU = "jama-trenet-eu"
|
|
211
187
|
J_FAIRUSE_ORG = "j-fairuse-org"
|
|
@@ -279,11 +255,60 @@ module TempmailSdk
|
|
|
279
255
|
TEMPGMAILER = "tempgmailer"
|
|
280
256
|
TEMP_MAIL_ORG = "temp-mail-org"
|
|
281
257
|
XKX_ME = "xkx-me"
|
|
282
|
-
GONEBOX_EMAIL = "gonebox-email"
|
|
283
258
|
MAILCAT_AI = "mailcat-ai"
|
|
284
259
|
TEMPGO_EMAIL = "tempgo-email"
|
|
285
260
|
RESTMAIL_NET = "restmail-net"
|
|
286
261
|
DROPMAIL_ME = "dropmail-me"
|
|
287
262
|
TEN_MINUTE_MAIL_NET = "ten-minute-mail-net"
|
|
263
|
+
TEMPMAILS_IO = "tempmails-io"
|
|
264
|
+
SHITPOST_EMAIL = "shitpost-email"
|
|
265
|
+
SMAILS = "smails"
|
|
266
|
+
TEMPMAILPORTAL = "tempmailportal"
|
|
267
|
+
HUSKMAIL = "huskmail"
|
|
268
|
+
ZERODROP = "zerodrop"
|
|
269
|
+
FIRETEMPMAIL = "firetempmail"
|
|
270
|
+
NULLMAIL = "nullmail"
|
|
271
|
+
TENMIN_APP = "tenmin-app"
|
|
272
|
+
MTEMPMAIL = "mtempmail"
|
|
273
|
+
TEMPMAIL_EE = "tempmail-ee"
|
|
274
|
+
TEMPORARYMAIL_COM = "temporarymail-com"
|
|
275
|
+
C_30MINEMAIL = "30minemail"
|
|
276
|
+
LINSHI_XYZ = "linshi-xyz"
|
|
277
|
+
CRAZYMAILING = "crazymailing"
|
|
278
|
+
NUKEMAIL = "nukemail"
|
|
279
|
+
SHADOWMAIL = "shadowmail"
|
|
280
|
+
FLYBYMAIL = "flybymail"
|
|
281
|
+
NOWTEMPMAIL = "nowtempmail"
|
|
282
|
+
CLAWDEMAIL = "clawdemail"
|
|
283
|
+
TEMPMAIL100 = "tempmail100"
|
|
284
|
+
TEMPMAILTO = "tempmailto"
|
|
285
|
+
TEMP_MAIL_GG = "temp-mail-gg"
|
|
286
|
+
TMPKIT = "tmpkit"
|
|
287
|
+
INTERNXT = "internxt"
|
|
288
|
+
GENERATOR_EMAIL = "generator-email"
|
|
289
|
+
BLONDMAIL_COM = "blondmail-com"
|
|
290
|
+
CHAPSMAIL_COM = "chapsmail-com"
|
|
291
|
+
CLOWMAIL_COM = "clowmail-com"
|
|
292
|
+
DROPJAR_COM = "dropjar-com"
|
|
293
|
+
FIVERMAIL_COM = "fivermail-com"
|
|
294
|
+
GETAIRMAIL_COM = "getairmail-com"
|
|
295
|
+
GETMULE_COM = "getmule-com"
|
|
296
|
+
INBOXBEAR_COM = "inboxbear-com"
|
|
297
|
+
REPLYLOOP_COM = "replyloop-com"
|
|
298
|
+
TEMPTAMI_COM = "temptami-com"
|
|
299
|
+
GIMPMAIL_COM = "gimpmail-com"
|
|
300
|
+
GIVMAIL_COM = "givmail-com"
|
|
301
|
+
GUYSMAIL_COM = "guysmail-com"
|
|
302
|
+
ROBOT_MAIL_COM = "robot-mail-com"
|
|
303
|
+
TUPMAIL_COM = "tupmail-com"
|
|
304
|
+
VOMOTO_COM = "vomoto-com"
|
|
305
|
+
UQU_ME = "uqu-me"
|
|
306
|
+
N9K3R_COM = "9k3r-com"
|
|
307
|
+
N2FAMAIL_COM = "2famail-com"
|
|
308
|
+
XIKEMAIL_COM = "xikemail-com"
|
|
309
|
+
FLDUBAI_COM = "fldubai-com"
|
|
310
|
+
NICEGROUND_SHOP = "niceground-shop"
|
|
311
|
+
GLASSWHITEHUB_COM = "glasswhitehub-com"
|
|
312
|
+
HUBAICLASS_ORG = "hubaiclass-org"
|
|
288
313
|
end
|
|
289
314
|
end
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# 每项为 [slug, name, website],注册表按此顺序枚举,顺序为硬约束。
|
|
5
5
|
#
|
|
6
6
|
module TempmailSdk
|
|
7
|
-
#
|
|
7
|
+
# 290 个渠道的有序元数据
|
|
8
8
|
CHANNEL_DATA = [
|
|
9
9
|
["tempmail", "TempMail", "tempmail.ing"],
|
|
10
10
|
["tempmail-cn", "TempMail CN", "tempmail.cn"],
|
|
@@ -17,7 +17,6 @@ module TempmailSdk
|
|
|
17
17
|
["ygwpr-com", "ygwpr.com", "10minutemail.one"],
|
|
18
18
|
["imxwe-com", "imxwe.com", "10minutemail.one"],
|
|
19
19
|
["linshiyou", "临时邮", "linshiyou.com"],
|
|
20
|
-
["mffac", "MFFAC", "mffac.com"],
|
|
21
20
|
["tempmail-lol", "TempMail LOL", "tempmail.lol"],
|
|
22
21
|
["chatgpt-org-uk", "ChatGPT Mail", "mail.chatgpt.org.uk"],
|
|
23
22
|
["temp-mail-io", "Temp-Mail.io", "temp-mail.io"],
|
|
@@ -31,6 +30,7 @@ module TempmailSdk
|
|
|
31
30
|
["mailforspam-disposable", "MailForSpam Disposable", "disposable.email"],
|
|
32
31
|
["tempmailc", "TempMailC", "tempmailc.com"],
|
|
33
32
|
["mailnesia", "Mailnesia", "mailnesia.com"],
|
|
33
|
+
["mailticking", "MailTicking", "mailticking.com"],
|
|
34
34
|
["throwawaymail", "ThrowawayMail", "throwawaymail.app"],
|
|
35
35
|
["tempmail-fish", "TempMail Fish", "tempmail.fish"],
|
|
36
36
|
["neighbours-sh", "Neighbours", "neighbours.sh"],
|
|
@@ -52,35 +52,18 @@ module TempmailSdk
|
|
|
52
52
|
["getnada-net", "getnada.net", "getnada.net"],
|
|
53
53
|
["jawatengah-net", "jawatengah.net", "getnada.net"],
|
|
54
54
|
["jawatimur-net", "jawatimur.net", "getnada.net"],
|
|
55
|
-
["kalimantanbarat-net", "kalimantanbarat.net", "getnada.net"],
|
|
56
|
-
["kalimantanselatan-net", "kalimantanselatan.net", "getnada.net"],
|
|
57
|
-
["kalimantantengah-net", "kalimantantengah.net", "getnada.net"],
|
|
58
55
|
["kalimantantimur-net", "kalimantantimur.net", "getnada.net"],
|
|
59
|
-
["kalimantanutara-net", "kalimantanutara.net", "getnada.net"],
|
|
60
|
-
["kepulauanriau-net", "kepulauanriau.net", "getnada.net"],
|
|
61
56
|
["luxury345-com", "luxury345.com", "getnada.net"],
|
|
62
|
-
["malukuutara-net", "malukuutara.net", "getnada.net"],
|
|
63
|
-
["nusatenggarabarat-net", "nusatenggarabarat.net", "getnada.net"],
|
|
64
|
-
["nusatenggaratimur-net", "nusatenggaratimur.net", "getnada.net"],
|
|
65
|
-
["papuabarat-net", "papuabarat.net", "getnada.net"],
|
|
66
|
-
["papuabaratdaya-net", "papuabaratdaya.net", "getnada.net"],
|
|
67
|
-
["papuaselatan-net", "papuaselatan.net", "getnada.net"],
|
|
68
57
|
["pehol-com", "pehol.com", "getnada.net"],
|
|
69
58
|
["ptruyen-com", "ptruyen.com", "getnada.net"],
|
|
70
|
-
["pulaubali-net", "pulaubali.net", "getnada.net"],
|
|
71
59
|
["riau-net", "riau.net", "getnada.net"],
|
|
72
60
|
["seokey-org", "seokey.org", "getnada.net"],
|
|
73
|
-
["sulawesibarat-net", "sulawesibarat.net", "getnada.net"],
|
|
74
61
|
["sulawesiselatan-net", "sulawesiselatan.net", "getnada.net"],
|
|
75
|
-
["sulawesitengah-net", "sulawesitengah.net", "getnada.net"],
|
|
76
|
-
["sulawesitenggara-net", "sulawesitenggara.net", "getnada.net"],
|
|
77
62
|
["sumaterabarat-net", "sumaterabarat.net", "getnada.net"],
|
|
78
|
-
["sumateraselatan-net", "sumateraselatan.net", "getnada.net"],
|
|
79
63
|
["sumaterautara-net", "sumaterautara.net", "getnada.net"],
|
|
80
64
|
["villatogel-com", "villatogel.com", "getnada.net"],
|
|
81
65
|
["mail123", "Mail123", "mail123.fr"],
|
|
82
66
|
["mail10s", "Mail10s", "mail10s.com"],
|
|
83
|
-
["webmailtemp", "WebMailTemp", "webmailtemp.com"],
|
|
84
67
|
["tempfastmail", "TempFastMail", "tempfastmail.com"],
|
|
85
68
|
["1sec-mail", "1SecMail", "1sec-mail.com"],
|
|
86
69
|
["fakemail", "FakeMail", "fakemail.net"],
|
|
@@ -115,7 +98,6 @@ module TempmailSdk
|
|
|
115
98
|
["tmail-ws", "tmail.ws", "moakt.com"],
|
|
116
99
|
["bareed-ws", "bareed.ws", "moakt.com"],
|
|
117
100
|
["email10min", "Email10Min", "email10min.com"],
|
|
118
|
-
["mjj-cm", "MJJ Mail", "mjj.cm"],
|
|
119
101
|
["linshi-co", "临时Co", "linshi.co"],
|
|
120
102
|
["harakirimail", "HarakiriMail", "harakirimail.com"],
|
|
121
103
|
["jqkjqk-xyz", "jqkjqk.xyz", "mail.zhujump.com"],
|
|
@@ -144,7 +126,6 @@ module TempmailSdk
|
|
|
144
126
|
["guerrillamail-org", "GuerrillaMail Org", "guerrillamail.org"],
|
|
145
127
|
["guerrillamailblock", "GuerrillaMailBlock", "guerrillamailblock.com"],
|
|
146
128
|
["guerrillamail-com-www", "GuerrillaMail WWW", "guerrillamail.com"],
|
|
147
|
-
["m2u", "MailToYou", "m2u.io"],
|
|
148
129
|
["tempy-email", "Tempy Email", "tempy.email"],
|
|
149
130
|
["fmail", "FMail", "fmail.men"],
|
|
150
131
|
["ockito", "Ockito", "ockito.com"],
|
|
@@ -162,7 +143,6 @@ module TempmailSdk
|
|
|
162
143
|
["haribu", "Haribu", "haribu.net"],
|
|
163
144
|
["rootsh", "Rootsh(BccTo)", "rootsh.com"],
|
|
164
145
|
["fake-email-site", "FakeEmailSite", "fake-email.site"],
|
|
165
|
-
["mohmal", "Mohmal", "mohmal.com"],
|
|
166
146
|
["mailgolem", "MailGolem", "mailgolem.com"],
|
|
167
147
|
["best-temp-mail", "BestTempMail", "best-temp-mail.com"],
|
|
168
148
|
["disposablemail-app", "DisposableMail", "disposablemail.app"],
|
|
@@ -170,7 +150,6 @@ module TempmailSdk
|
|
|
170
150
|
["minuteinbox", "MinuteInbox", "minuteinbox.com"],
|
|
171
151
|
["mailcatch", "MailCatch", "mailcatch.com"],
|
|
172
152
|
["tempemail-co", "TempEmail.co", "tempemail.co"],
|
|
173
|
-
["tempemails-net", "TempEmails.net", "tempemails.net"],
|
|
174
153
|
["altmails", "AltMails", "tempmail.altmails.com"],
|
|
175
154
|
["tempemail-info", "TempEmailInfo", "tempemail.info"],
|
|
176
155
|
["smailpro", "SmailPro", "smailpro.com"],
|
|
@@ -183,14 +162,12 @@ module TempmailSdk
|
|
|
183
162
|
["tempp-mails", "TemppMails", "tempp-mails.com"],
|
|
184
163
|
["emailtemp-org", "EmailTemp", "emailtemp.org"],
|
|
185
164
|
["mytempmail-cc", "MyTempMail.cc", "mytempmail.cc"],
|
|
186
|
-
["temp-mail-now", "TempMailNow", "temp-mail.now"],
|
|
187
165
|
["mail-td", "Mail.td", "mail.td"],
|
|
188
166
|
["mailhole-de", "Mailhole.de", "mailhole.de"],
|
|
189
167
|
["tmail-link", "TMail.link", "tmail.link"],
|
|
190
168
|
["24mail-chacuo", "24Mail Chacuo", "24mail.chacuo.net"],
|
|
191
169
|
["nimail", "NiMail", "nimail.cn"],
|
|
192
170
|
["freecustom", "FreeCustom.Email", "freecustom.email"],
|
|
193
|
-
["16888888-cyou", "Mailmomy (16888888.cyou)", "mailmomy.com"],
|
|
194
171
|
["17666688-shop", "Mailmomy (17666688.shop)", "mailmomy.com"],
|
|
195
172
|
["282mail-com", "Mailmomy (282mail.com)", "mailmomy.com"],
|
|
196
173
|
["blackhole-djurby-se", "Mailinator (blackhole.djurby.se)", "mailinator.com"],
|
|
@@ -205,7 +182,6 @@ module TempmailSdk
|
|
|
205
182
|
["easyme-pro", "Mailmomy (easyme.pro)", "mailmomy.com"],
|
|
206
183
|
["ebs-com-ar", "Mailinator (ebs.com.ar)", "mailinator.com"],
|
|
207
184
|
["etgdev-de", "Mailinator (etgdev.de)", "mailinator.com"],
|
|
208
|
-
["evergreenco-shop", "Mailmomy (evergreenco.shop)", "mailmomy.com"],
|
|
209
185
|
["fwd2m-eszett-es", "Mailinator (fwd2m.eszett.es)", "mailinator.com"],
|
|
210
186
|
["jama-trenet-eu", "Mailinator (jama.trenet.eu)", "mailinator.com"],
|
|
211
187
|
["j-fairuse-org", "Mailinator (j.fairuse.org)", "mailinator.com"],
|
|
@@ -279,11 +255,60 @@ module TempmailSdk
|
|
|
279
255
|
["tempgmailer", "TempGmailer", "tempgmailer.com"],
|
|
280
256
|
["temp-mail-org", "Temp-Mail.org", "temp-mail.org"],
|
|
281
257
|
["xkx-me", "XKX.me", "xkx.me"],
|
|
282
|
-
["gonebox-email", "Gonebox Email", "gonebox.email"],
|
|
283
258
|
["mailcat-ai", "Mailcat AI", "mailcat.ai"],
|
|
284
259
|
["tempgo-email", "TempGo Email", "tempgo.email"],
|
|
285
260
|
["restmail-net", "Restmail.net", "restmail.net"],
|
|
286
261
|
["dropmail-me", "DropMail.me", "dropmail.me"],
|
|
287
262
|
["ten-minute-mail-net", "10MinuteMail.net", "10minutemail.net"],
|
|
263
|
+
["tempmails-io", "TempMails.io", "tempmails.io"],
|
|
264
|
+
["shitpost-email", "ShitPost.email", "shitpost.email"],
|
|
265
|
+
["smails", "Smails.dev", "smails.dev"],
|
|
266
|
+
["tempmailportal", "TempMail Portal", "tempmailportal.com"],
|
|
267
|
+
["huskmail", "HuskMail", "huskmail.xyz"],
|
|
268
|
+
["zerodrop", "Zerodrop", "zerodrop.dev"],
|
|
269
|
+
["firetempmail", "FireTempMail", "firetempmail.com"],
|
|
270
|
+
["nullmail", "NullMail", "nullmail.cc"],
|
|
271
|
+
["tenmin-app", "Tenmin.app", "tenmin.app"],
|
|
272
|
+
["mtempmail", "MTempMail", "mtempmail.com"],
|
|
273
|
+
["tempmail-ee", "TempMail.ee", "tempmail.ee"],
|
|
274
|
+
["temporarymail-com", "Temporarymail.com", "temporarymail.com"],
|
|
275
|
+
["30minemail", "30minemail", "30minemail.com"],
|
|
276
|
+
["linshi-xyz", "Linshi.xyz", "linshi.xyz"],
|
|
277
|
+
["crazymailing", "CrazyMailing", "crazymailing.com"],
|
|
278
|
+
["nukemail", "NukeMail", "nukemail.app"],
|
|
279
|
+
["shadowmail", "ShadowMail", "shadowmail.win"],
|
|
280
|
+
["flybymail", "FlyByMail", "flybymail.com"],
|
|
281
|
+
["nowtempmail", "NowTempMail", "nowtempmail.com"],
|
|
282
|
+
["clawdemail", "ClawdEmail", "clawdemail.com"],
|
|
283
|
+
["tempmail100", "TempMail100", "tempmail100.com"],
|
|
284
|
+
["tempmailto", "Tempmailto", "tempmailto.com"],
|
|
285
|
+
["temp-mail-gg", "TempMailGG", "temp-mail.gg"],
|
|
286
|
+
["tmpkit", "Tmpkit", "tmpkit.com"],
|
|
287
|
+
["internxt", "Internxt", "internxt.com"],
|
|
288
|
+
["generator-email", "GeneratorEmail", "generator.email"],
|
|
289
|
+
["blondmail-com", "blondmail.com", "inboxes.com"],
|
|
290
|
+
["chapsmail-com", "chapsmail.com", "inboxes.com"],
|
|
291
|
+
["clowmail-com", "clowmail.com", "inboxes.com"],
|
|
292
|
+
["dropjar-com", "dropjar.com", "inboxes.com"],
|
|
293
|
+
["fivermail-com", "fivermail.com", "inboxes.com"],
|
|
294
|
+
["getairmail-com", "getairmail.com", "inboxes.com"],
|
|
295
|
+
["getmule-com", "getmule.com", "inboxes.com"],
|
|
296
|
+
["inboxbear-com", "inboxbear.com", "inboxes.com"],
|
|
297
|
+
["replyloop-com", "replyloop.com", "inboxes.com"],
|
|
298
|
+
["temptami-com", "temptami.com", "inboxes.com"],
|
|
299
|
+
["gimpmail-com", "gimpmail.com", "inboxes.com"],
|
|
300
|
+
["givmail-com", "givmail.com", "inboxes.com"],
|
|
301
|
+
["guysmail-com", "guysmail.com", "inboxes.com"],
|
|
302
|
+
["robot-mail-com", "robot-mail.com", "inboxes.com"],
|
|
303
|
+
["tupmail-com", "tupmail.com", "inboxes.com"],
|
|
304
|
+
["vomoto-com", "vomoto.com", "inboxes.com"],
|
|
305
|
+
["uqu-me", "uqu.me", "mail.cx"],
|
|
306
|
+
["9k3r-com", "9k3r.com", "mail.cx"],
|
|
307
|
+
["2famail-com", "2famail.com", "mailmomy.com"],
|
|
308
|
+
["xikemail-com", "xikemail.com", "mailmomy.com"],
|
|
309
|
+
["fldubai-com", "fldubai.com", "mail.tm"],
|
|
310
|
+
["niceground-shop", "niceground.shop", "duckmail.sbs"],
|
|
311
|
+
["glasswhitehub-com", "glasswhitehub.com", "duckmail.sbs"],
|
|
312
|
+
["hubaiclass-org", "hubaiclass.org", "duckmail.sbs"],
|
|
288
313
|
].freeze
|
|
289
314
|
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "uri"
|
|
4
|
+
|
|
5
|
+
module TempmailSdk
|
|
6
|
+
module Providers
|
|
7
|
+
# ClawdEmail 渠道实现(clawdemail.com,API 域 api.clawdemail.com)
|
|
8
|
+
#
|
|
9
|
+
# POST /register 建箱(无验证码,body {"name":"xxx"},响应 success/email/token),
|
|
10
|
+
# GET /inbox 读信列表(Header Authorization: Bearer <token>,
|
|
11
|
+
# 响应 success/email/count/unread/emails[]),GET /email/{id} 取单封详情(Bearer)。
|
|
12
|
+
# 信件保留 30 分钟,仅接收不发送,正文仅纯文本。
|
|
13
|
+
module Clawdemail
|
|
14
|
+
CHANNEL = "clawdemail"
|
|
15
|
+
BASE_URL = "https://api.clawdemail.com"
|
|
16
|
+
|
|
17
|
+
HEADERS = {
|
|
18
|
+
"Accept" => "application/json",
|
|
19
|
+
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
|
|
20
|
+
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
|
21
|
+
}.freeze
|
|
22
|
+
|
|
23
|
+
RETRY_KEYS = %w[id Id slug messageId message_id].freeze
|
|
24
|
+
|
|
25
|
+
module_function
|
|
26
|
+
|
|
27
|
+
# 设置 clawdemail 请求的通用请求头(可选附带 Bearer token)
|
|
28
|
+
# @param token [String] 认证令牌
|
|
29
|
+
# @return [Hash]
|
|
30
|
+
def auth_headers(token)
|
|
31
|
+
hdrs = HEADERS.dup
|
|
32
|
+
hdrs["Authorization"] = "Bearer #{token}" unless token.to_s.empty?
|
|
33
|
+
hdrs
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# 创建 clawdemail.com 临时邮箱
|
|
37
|
+
# POST /register(body {"name":""})返回 email 与 token。
|
|
38
|
+
# @return [EmailInfo]
|
|
39
|
+
def generate_email
|
|
40
|
+
resp = Http.post("#{BASE_URL}/register",
|
|
41
|
+
headers: auth_headers("").merge("Content-Type" => "application/json"),
|
|
42
|
+
json: { "name" => "" }, timeout: 15)
|
|
43
|
+
raise "clawdemail: 创建邮箱失败 http #{resp.status_code}" unless resp.ok?
|
|
44
|
+
|
|
45
|
+
data = resp.json
|
|
46
|
+
raise "clawdemail: 创建响应非对象" unless data.is_a?(Hash)
|
|
47
|
+
|
|
48
|
+
email = data["email"].to_s.strip
|
|
49
|
+
token = data["token"].to_s.strip
|
|
50
|
+
raise "clawdemail: 创建邮箱响应缺少必要字段" if email.empty? || token.empty? || !email.include?("@")
|
|
51
|
+
|
|
52
|
+
EmailInfo.new(channel: CHANNEL, email: email, token: token)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# 获取 clawdemail.com 邮件列表
|
|
56
|
+
# 流程:GET /inbox?limit=50 取列表,对每个元素按 id 逐封 GET /email/{id} 合并详情;
|
|
57
|
+
# 详情失败时以列表摘要归一。
|
|
58
|
+
# @param email [String] 邮箱地址
|
|
59
|
+
# @param token [String] 注册返回的认证令牌
|
|
60
|
+
# @return [Array<Email>]
|
|
61
|
+
def get_emails(email, token)
|
|
62
|
+
addr = email.to_s.strip
|
|
63
|
+
resp = Http.get("#{BASE_URL}/inbox?limit=50",
|
|
64
|
+
headers: auth_headers(token), timeout: 15)
|
|
65
|
+
raise "clawdemail: 获取邮件列表失败 http #{resp.status_code}" unless resp.ok?
|
|
66
|
+
|
|
67
|
+
data = resp.json
|
|
68
|
+
raise "clawdemail: 收件箱响应非对象" unless data.is_a?(Hash)
|
|
69
|
+
|
|
70
|
+
unless data["success"] == true
|
|
71
|
+
raise "clawdemail: 读取收件箱失败: #{data["error"]}"
|
|
72
|
+
end
|
|
73
|
+
emails = data["emails"]
|
|
74
|
+
return [] unless emails.is_a?(Array)
|
|
75
|
+
|
|
76
|
+
emails.filter_map do |m|
|
|
77
|
+
next unless m.is_a?(Hash)
|
|
78
|
+
|
|
79
|
+
detail = get_detail(token, message_id_of(m))
|
|
80
|
+
row = m.dup
|
|
81
|
+
if detail.is_a?(Hash)
|
|
82
|
+
detail.each { |k, v| row[k] = v unless row.key?(k) }
|
|
83
|
+
end
|
|
84
|
+
Normalize.normalize_email(row, addr)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# 从列表元素中提取邮件 ID(候选键 id/Id/slug/messageId/message_id)
|
|
89
|
+
# @param row [Hash]
|
|
90
|
+
# @return [String]
|
|
91
|
+
def message_id_of(row)
|
|
92
|
+
RETRY_KEYS.each do |key|
|
|
93
|
+
val = row[key]
|
|
94
|
+
return val.to_s.strip unless val.nil? || val.to_s.strip.empty?
|
|
95
|
+
end
|
|
96
|
+
""
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# 获取 clawdemail.com 单封邮件详情
|
|
100
|
+
# GET /email/{id}(Bearer token),响应含 email 嵌套对象(from_addr/body_text/received_at)
|
|
101
|
+
# 时提升嵌套对象。
|
|
102
|
+
# @param token [String] 认证令牌
|
|
103
|
+
# @param id [String] 邮件 ID
|
|
104
|
+
# @return [Hash, nil]
|
|
105
|
+
def get_detail(token, id)
|
|
106
|
+
return nil if id.to_s.empty?
|
|
107
|
+
|
|
108
|
+
uri = "#{BASE_URL}/email/#{URI.encode_www_form_component(id)}"
|
|
109
|
+
resp = Http.get(uri, headers: auth_headers(token), timeout: 15)
|
|
110
|
+
return nil unless resp.ok?
|
|
111
|
+
|
|
112
|
+
detail = resp.json
|
|
113
|
+
return nil unless detail.is_a?(Hash)
|
|
114
|
+
|
|
115
|
+
nested = detail["email"]
|
|
116
|
+
nested.is_a?(Hash) ? nested : detail
|
|
117
|
+
rescue StandardError
|
|
118
|
+
nil
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "uri"
|
|
4
|
+
|
|
5
|
+
module TempmailSdk
|
|
6
|
+
module Providers
|
|
7
|
+
# Crazymailing 渠道实现(crazymailing.com)
|
|
8
|
+
#
|
|
9
|
+
# Next.js 全栈站点,API 结构:
|
|
10
|
+
# POST /api/mailbox(空 JSON body)建箱,响应
|
|
11
|
+
# {"mailbox":{"id":"...","address":"...@crazymailing.com","expiresAt":"<RFC3339>"}};
|
|
12
|
+
# GET /api/messages?mailbox=<完整地址 URL 编码> 读信,响应 {"messages":[...]};
|
|
13
|
+
# GET /api/message/{id}/body 取单封正文(完整 HTML 页面)。
|
|
14
|
+
# 请求需携带 Origin/Referer 浏览器形态头。
|
|
15
|
+
module Crazymailing
|
|
16
|
+
CHANNEL = "crazymailing"
|
|
17
|
+
BASE_URL = "https://crazymailing.com"
|
|
18
|
+
|
|
19
|
+
HEADERS = {
|
|
20
|
+
"Content-Type" => "application/json",
|
|
21
|
+
"Accept" => "application/json",
|
|
22
|
+
"Origin" => BASE_URL,
|
|
23
|
+
"Referer" => "#{BASE_URL}/",
|
|
24
|
+
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
|
|
25
|
+
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
|
26
|
+
}.freeze
|
|
27
|
+
|
|
28
|
+
RETRY_KEYS = %w[id Id slug messageId message_id].freeze
|
|
29
|
+
|
|
30
|
+
module_function
|
|
31
|
+
|
|
32
|
+
# 创建临时邮箱
|
|
33
|
+
# POST /api/mailbox(空 JSON body);域名由服务端统一分配(当前仅 @crazymailing.com)。
|
|
34
|
+
# @return [EmailInfo]
|
|
35
|
+
def generate_email
|
|
36
|
+
resp = Http.post("#{BASE_URL}/api/mailbox",
|
|
37
|
+
headers: HEADERS, json: {}, timeout: 15)
|
|
38
|
+
raise "crazymailing: 创建邮箱失败 http #{resp.status_code}" unless resp.ok?
|
|
39
|
+
|
|
40
|
+
data = resp.json
|
|
41
|
+
mailbox = data.is_a?(Hash) ? data["mailbox"] : nil
|
|
42
|
+
raise "crazymailing: 创建响应缺少 mailbox" unless mailbox.is_a?(Hash)
|
|
43
|
+
|
|
44
|
+
address = mailbox["address"].to_s.strip
|
|
45
|
+
raise "crazymailing: 创建响应缺少 mailbox.address" if address.empty?
|
|
46
|
+
|
|
47
|
+
EmailInfo.new(channel: CHANNEL, email: address,
|
|
48
|
+
token: mailbox["id"].to_s, expires_at: mailbox["expiresAt"].to_s)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# 读取收件箱
|
|
52
|
+
# GET /api/messages?mailbox=<完整地址 URL 编码>,响应 {"messages":[...]};
|
|
53
|
+
# 对每个元素逐封 GET /api/message/{id}/body 拉取正文(失败不阻断列表)。
|
|
54
|
+
# @param email [String] 完整邮箱地址
|
|
55
|
+
# @param token [String] 建箱返回的 mailbox id
|
|
56
|
+
# @return [Array<Email>]
|
|
57
|
+
def get_emails(email, token)
|
|
58
|
+
addr = email.to_s.strip
|
|
59
|
+
raise "crazymailing: 邮箱地址为空" if addr.empty?
|
|
60
|
+
|
|
61
|
+
uri = "#{BASE_URL}/api/messages?mailbox=#{URI.encode_www_form_component(addr)}"
|
|
62
|
+
resp = Http.get(uri, headers: HEADERS, timeout: 15)
|
|
63
|
+
raise "crazymailing: 读取收件箱失败 http #{resp.status_code}" unless resp.ok?
|
|
64
|
+
|
|
65
|
+
data = resp.json
|
|
66
|
+
messages = data.is_a?(Hash) ? data["messages"] : nil
|
|
67
|
+
return [] unless messages.is_a?(Array)
|
|
68
|
+
|
|
69
|
+
messages.filter_map do |m|
|
|
70
|
+
next unless m.is_a?(Hash)
|
|
71
|
+
|
|
72
|
+
row = m.dup
|
|
73
|
+
row["to"] = addr unless row.key?("to")
|
|
74
|
+
id = message_id_of(row)
|
|
75
|
+
unless id.empty?
|
|
76
|
+
# 列表元素为摘要,正文须逐封二拉(失败不阻断)
|
|
77
|
+
html = get_body(id)
|
|
78
|
+
row["html"] = html if !html.empty?
|
|
79
|
+
end
|
|
80
|
+
Normalize.normalize_email(row, addr)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# 从列表元素中提取邮件 ID(候选键 id/Id/slug/messageId/message_id)
|
|
85
|
+
# @param row [Hash]
|
|
86
|
+
# @return [String]
|
|
87
|
+
def message_id_of(row)
|
|
88
|
+
RETRY_KEYS.each do |key|
|
|
89
|
+
val = row[key]
|
|
90
|
+
return val.to_s.strip unless val.nil? || val.to_s.strip.empty?
|
|
91
|
+
end
|
|
92
|
+
""
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# 拉取单封正文(GET /api/message/{id}/body,响应为完整 HTML 页面)
|
|
96
|
+
# @param id [String] 邮件 ID
|
|
97
|
+
# @return [String]
|
|
98
|
+
def get_body(id)
|
|
99
|
+
uri = "#{BASE_URL}/api/message/#{URI.encode_www_form_component(id)}/body"
|
|
100
|
+
resp = Http.get(uri,
|
|
101
|
+
headers: {
|
|
102
|
+
"Accept" => "text/html,application/xhtml+xml,*/*;q=0.8",
|
|
103
|
+
"Origin" => BASE_URL,
|
|
104
|
+
"Referer" => "#{BASE_URL}/",
|
|
105
|
+
"User-Agent" => HEADERS["User-Agent"]
|
|
106
|
+
},
|
|
107
|
+
timeout: 15)
|
|
108
|
+
return "" unless resp.ok?
|
|
109
|
+
|
|
110
|
+
resp.body.to_s
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -26,7 +26,7 @@ module TempmailSdk
|
|
|
26
26
|
resp.raise_for_status
|
|
27
27
|
data = resp.json
|
|
28
28
|
members = data.is_a?(Array) ? data : (data["hydra:member"] || [])
|
|
29
|
-
members.select { |d| d["isActive"] }.map { |d| d["domain"] }
|
|
29
|
+
members.select { |d| d["isActive"] || d["isVerified"] }.map { |d| d["domain"] }
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
# @return [EmailInfo]
|
|
@@ -34,7 +34,14 @@ module TempmailSdk
|
|
|
34
34
|
domains = fetch_domains
|
|
35
35
|
raise "No available domains" if domains.empty?
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
generate_email_at_domain(domains.sample)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# 为 duckmail 指定域名的镜像渠道创建账号(跳过随机选域)
|
|
41
|
+
# @param domain [String]
|
|
42
|
+
# @return [EmailInfo]
|
|
43
|
+
def generate_email_at_domain(domain)
|
|
44
|
+
address = "#{random_string(12)}@#{domain}"
|
|
38
45
|
password = random_string(16)
|
|
39
46
|
acc = Http.post("#{BASE_URL}/accounts",
|
|
40
47
|
headers: DEFAULT_HEADERS.merge("Content-Type" => "application/ld+json"),
|