tempmail_sdk 1.3.3 → 1.3.5

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/tempmail_sdk/channels.rb +29 -7
  4. data/lib/tempmail_sdk/channels_data.rb +29 -7
  5. data/lib/tempmail_sdk/providers/altmails.rb +99 -0
  6. data/lib/tempmail_sdk/providers/apihz.rb +138 -0
  7. data/lib/tempmail_sdk/providers/awamail.rb +95 -0
  8. data/lib/tempmail_sdk/providers/best_temp_mail.rb +77 -0
  9. data/lib/tempmail_sdk/providers/chatgpt_org_uk.rb +129 -0
  10. data/lib/tempmail_sdk/providers/clawdemail.rb +122 -0
  11. data/lib/tempmail_sdk/providers/crazymailing.rb +114 -0
  12. data/lib/tempmail_sdk/providers/disposablemail.rb +125 -0
  13. data/lib/tempmail_sdk/providers/disposablemail_app.rb +66 -0
  14. data/lib/tempmail_sdk/providers/email10min.rb +152 -0
  15. data/lib/tempmail_sdk/providers/emailnator.rb +132 -0
  16. data/lib/tempmail_sdk/providers/emailtemp_org.rb +131 -0
  17. data/lib/tempmail_sdk/providers/expressinboxhub.rb +118 -0
  18. data/lib/tempmail_sdk/providers/fakemail.rb +143 -0
  19. data/lib/tempmail_sdk/providers/firetempmail.rb +86 -0
  20. data/lib/tempmail_sdk/providers/flybymail.rb +93 -0
  21. data/lib/tempmail_sdk/providers/generator_email.rb +146 -0
  22. data/lib/tempmail_sdk/providers/haribu.rb +29 -3
  23. data/lib/tempmail_sdk/providers/huskmail.rb +132 -0
  24. data/lib/tempmail_sdk/providers/internxt.rb +176 -0
  25. data/lib/tempmail_sdk/providers/linshi_xyz.rb +79 -0
  26. data/lib/tempmail_sdk/providers/linshiyouxiang_net.rb +85 -0
  27. data/lib/tempmail_sdk/providers/mail_sunls.rb +42 -1
  28. data/lib/tempmail_sdk/providers/mail_td.rb +161 -0
  29. data/lib/tempmail_sdk/providers/mailcat_ai.rb +52 -0
  30. data/lib/tempmail_sdk/providers/maildrop.rb +79 -4
  31. data/lib/tempmail_sdk/providers/mailgolem.rb +96 -0
  32. data/lib/tempmail_sdk/providers/mailinator.rb +9 -2
  33. data/lib/tempmail_sdk/providers/mailmomy.rb +1 -1
  34. data/lib/tempmail_sdk/providers/mailtemp_cc.rb +91 -0
  35. data/lib/tempmail_sdk/providers/mailticking.rb +139 -0
  36. data/lib/tempmail_sdk/providers/minuteinbox.rb +174 -0
  37. data/lib/tempmail_sdk/providers/moakt.rb +29 -3
  38. data/lib/tempmail_sdk/providers/mtempmail.rb +140 -0
  39. data/lib/tempmail_sdk/providers/mytempmail_cc.rb +76 -0
  40. data/lib/tempmail_sdk/providers/nowtempmail.rb +112 -0
  41. data/lib/tempmail_sdk/providers/noxen_de5_net.rb +392 -0
  42. data/lib/tempmail_sdk/providers/nukemail.rb +188 -0
  43. data/lib/tempmail_sdk/providers/nullmail.rb +95 -0
  44. data/lib/tempmail_sdk/providers/openinbox.rb +102 -0
  45. data/lib/tempmail_sdk/providers/shadowmail.rb +174 -0
  46. data/lib/tempmail_sdk/providers/shitpost_email.rb +85 -0
  47. data/lib/tempmail_sdk/providers/smail_pw.rb +156 -0
  48. data/lib/tempmail_sdk/providers/smails.rb +128 -0
  49. data/lib/tempmail_sdk/providers/socketio_mail.rb +25 -0
  50. data/lib/tempmail_sdk/providers/temp_mail_gg.rb +362 -0
  51. data/lib/tempmail_sdk/providers/tempgbox.rb +118 -0
  52. data/lib/tempmail_sdk/providers/tempmail100.rb +148 -0
  53. data/lib/tempmail_sdk/providers/tempmail_cn.rb +111 -0
  54. data/lib/tempmail_sdk/providers/tempmail_ee.rb +373 -0
  55. data/lib/tempmail_sdk/providers/tempmailportal.rb +131 -0
  56. data/lib/tempmail_sdk/providers/tempmails_io.rb +89 -0
  57. data/lib/tempmail_sdk/providers/tempmailto.rb +312 -0
  58. data/lib/tempmail_sdk/providers/temporarymail_com.rb +184 -0
  59. data/lib/tempmail_sdk/providers/tenmin_app.rb +100 -0
  60. data/lib/tempmail_sdk/providers/tenminutemail_net.rb +183 -0
  61. data/lib/tempmail_sdk/providers/thirty_min_email.rb +90 -0
  62. data/lib/tempmail_sdk/providers/tmpkit.rb +129 -0
  63. data/lib/tempmail_sdk/providers/twentyfourmail_chacuo.rb +83 -0
  64. data/lib/tempmail_sdk/providers/vip_215.rb +171 -0
  65. data/lib/tempmail_sdk/providers/zerodrop.rb +90 -0
  66. data/lib/tempmail_sdk/registry.rb +285 -23
  67. data/lib/tempmail_sdk/types.rb +13 -0
  68. data/lib/tempmail_sdk/version.rb +1 -1
  69. data/lib/tempmail_sdk.rb +1 -1
  70. metadata +58 -6
  71. data/lib/tempmail_sdk/providers/gonebox_email.rb +0 -89
  72. data/lib/tempmail_sdk/providers/temp_mail_now.rb +0 -103
  73. data/lib/tempmail_sdk/providers/webmailtemp.rb +0 -108
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module TempmailSdk
4
- module Providers
5
- # Temp-Mail.Now 渠道 — https://temp-mail.now
6
- # 基于会话 Cookie 的临时邮箱服务
7
- module TempMailNow
8
- CHANNEL = "temp-mail-now"
9
- BASE_URL = "https://temp-mail.now"
10
-
11
- PAGE_HEADERS = {
12
- "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
13
- "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
14
- }.freeze
15
-
16
- API_HEADERS = {
17
- "Accept" => "application/json, text/javascript, */*; q=0.01",
18
- "X-Requested-With" => "XMLHttpRequest",
19
- "Referer" => "#{BASE_URL}/en/",
20
- "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
21
- }.freeze
22
-
23
- module_function
24
-
25
- def extract_cookies(resp)
26
- cookies = {}
27
- resp.set_cookies.each do |line|
28
- pair = line.split(";").first.to_s.strip
29
- k, v = pair.split("=", 2)
30
- cookies[k] = v if k && v
31
- end
32
- cookies
33
- end
34
-
35
- def cookies_to_str(cookies)
36
- cookies.map { |k, v| "#{k}=#{v}" }.join("; ")
37
- end
38
-
39
- # 创建临时邮箱
40
- # @return [EmailInfo]
41
- def generate_email
42
- # 获取 session cookie
43
- resp = Http.get("#{BASE_URL}/en/", headers: PAGE_HEADERS, timeout: 15)
44
- resp.raise_for_status
45
- cookies = extract_cookies(resp)
46
- cookie_str = cookies_to_str(cookies)
47
- raise "temp-mail-now: 无法获取 session cookie" if cookie_str.empty?
48
-
49
- # 创建新邮箱
50
- resp2 = Http.post("#{BASE_URL}/change_email",
51
- headers: API_HEADERS.merge("Cookie" => cookie_str), timeout: 15)
52
- resp2.raise_for_status
53
-
54
- # 合并可能更新的 cookie
55
- extract_cookies(resp2).each { |k, v| cookies[k] = v }
56
- cookie_str = cookies_to_str(cookies)
57
-
58
- data = resp2.json
59
- raise "temp-mail-now: 响应格式无效" unless data.is_a?(Hash)
60
-
61
- address = data["new_email"] || ""
62
- raise "temp-mail-now: 创建邮箱失败" if address.empty? || !address.include?("@")
63
-
64
- EmailInfo.new(channel: CHANNEL, email: address, token: cookie_str)
65
- end
66
-
67
- # 获取邮件列表
68
- # @param token [String] session cookie
69
- # @param email [String]
70
- # @return [Array<Email>]
71
- def get_emails(token, email)
72
- raise "temp-mail-now: session cookie 不能为空" if token.nil? || token.empty?
73
-
74
- addr = (email || "").strip
75
- raise "temp-mail-now: 邮箱地址不能为空" if addr.empty?
76
-
77
- resp = Http.get("#{BASE_URL}/fetch_emails",
78
- headers: API_HEADERS.merge("Cookie" => token), timeout: 15)
79
- resp.raise_for_status
80
- data = resp.json
81
- return [] unless data.is_a?(Hash)
82
-
83
- emails_list = data["emails"]
84
- return [] unless emails_list.is_a?(Array)
85
-
86
- emails_list.filter_map do |item|
87
- next unless item.is_a?(Hash)
88
-
89
- raw = {
90
- "id" => item["id"] || "",
91
- "from" => item["from"] || item["from_address"] || item["sender"] || "",
92
- "to" => item["to"] || addr,
93
- "subject" => item["subject"] || "",
94
- "text" => item["text"] || item["body_text"] || "",
95
- "html" => item["html"] || item["body_html"] || "",
96
- "date" => item["date"] || item["received_at"] || ""
97
- }
98
- Normalize.normalize_email(raw, addr)
99
- end
100
- end
101
- end
102
- end
103
- end
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "base64"
4
- require "json"
5
- require "uri"
6
-
7
- module TempmailSdk
8
- module Providers
9
- # webmailtemp.com 临时邮箱渠道
10
- # GET /api/create 创建邮箱
11
- # GET /api/check/{username} 获取邮件列表
12
- module Webmailtemp
13
- CHANNEL = "webmailtemp"
14
- BASE_URL = "https://webmailtemp.com"
15
- TOK_PREFIX = "wmt1:"
16
-
17
- HEADERS = {
18
- "Accept" => "application/json",
19
- "User-Agent" => "Mozilla/5.0"
20
- }.freeze
21
-
22
- module_function
23
-
24
- def encode_token(username, cookie_hdr)
25
- raw = JSON.generate({ "u" => username, "c" => cookie_hdr })
26
- "#{TOK_PREFIX}#{Base64.strict_encode64(raw)}"
27
- end
28
-
29
- def decode_token(token)
30
- raise "webmailtemp: 无效的 token" unless token&.start_with?(TOK_PREFIX)
31
-
32
- data = JSON.parse(Base64.decode64(token[TOK_PREFIX.length..]))
33
- username = (data["u"] || "").strip
34
- cookie_hdr = (data["c"] || "").strip
35
- raise "webmailtemp: token 数据无效" if username.empty? || cookie_hdr.empty?
36
-
37
- { "username" => username, "cookie" => cookie_hdr }
38
- end
39
-
40
- # @return [EmailInfo]
41
- def generate_email
42
- resp = Http.get("#{BASE_URL}/api/create", headers: HEADERS, timeout: 15)
43
- resp.raise_for_status
44
- data = resp.json
45
- raise "webmailtemp: 创建邮箱响应无效" unless data.is_a?(Hash)
46
-
47
- email = (data["email"] || "").strip
48
- username = (data["username"] || "").strip
49
-
50
- # 从 set_cookies 提取第一个 cookie
51
- cookie_hdr = ""
52
- cookies = resp.set_cookies
53
- unless cookies.empty?
54
- pair = cookies.first.split(";").first.to_s.strip
55
- cookie_hdr = pair unless pair.empty?
56
- end
57
-
58
- unless data["success"] && !email.empty? && email.include?("@") && !username.empty? && !cookie_hdr.empty?
59
- raise "webmailtemp: 创建邮箱响应无效"
60
- end
61
-
62
- expires_at = nil
63
- ttl = data["ttl"]
64
- if ttl.is_a?(Numeric) && ttl > 0
65
- expires_at = ((Time.now.to_f + ttl) * 1000).to_i
66
- end
67
-
68
- EmailInfo.new(channel: CHANNEL, email: email, token: encode_token(username, cookie_hdr),
69
- expires_at: expires_at)
70
- end
71
-
72
- # @param token [String]
73
- # @param email [String]
74
- # @return [Array<Email>]
75
- def get_emails(token, email)
76
- address = (email || "").strip
77
- raise "webmailtemp: 邮箱地址为空" if address.empty?
78
-
79
- session = decode_token((token || "").strip)
80
- headers = HEADERS.merge("Cookie" => session["cookie"])
81
-
82
- resp = Http.get("#{BASE_URL}/api/check/#{URI.encode_www_form_component(session["username"])}",
83
- headers: headers, timeout: 15)
84
- resp.raise_for_status
85
- data = resp.json
86
-
87
- rows = data.is_a?(Hash) ? data["emails"] : nil
88
- return [] unless rows.is_a?(Array)
89
-
90
- rows.filter_map do |row|
91
- next unless row.is_a?(Hash)
92
-
93
- raw = {
94
- "id" => row["id"],
95
- "from" => row["from"],
96
- "to" => address,
97
- "subject" => row["subject"],
98
- "text" => row["body"],
99
- "html" => row["html"],
100
- "date" => row["received_at"] || row["timestamp"],
101
- "attachments" => row["attachments"]
102
- }
103
- Normalize.normalize_email(raw, address)
104
- end
105
- end
106
- end
107
- end
108
- end