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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/tempmail_sdk/channels.rb +29 -7
- data/lib/tempmail_sdk/channels_data.rb +29 -7
- data/lib/tempmail_sdk/providers/altmails.rb +99 -0
- data/lib/tempmail_sdk/providers/apihz.rb +138 -0
- data/lib/tempmail_sdk/providers/awamail.rb +95 -0
- data/lib/tempmail_sdk/providers/best_temp_mail.rb +77 -0
- data/lib/tempmail_sdk/providers/chatgpt_org_uk.rb +129 -0
- data/lib/tempmail_sdk/providers/clawdemail.rb +122 -0
- data/lib/tempmail_sdk/providers/crazymailing.rb +114 -0
- data/lib/tempmail_sdk/providers/disposablemail.rb +125 -0
- data/lib/tempmail_sdk/providers/disposablemail_app.rb +66 -0
- data/lib/tempmail_sdk/providers/email10min.rb +152 -0
- data/lib/tempmail_sdk/providers/emailnator.rb +132 -0
- data/lib/tempmail_sdk/providers/emailtemp_org.rb +131 -0
- data/lib/tempmail_sdk/providers/expressinboxhub.rb +118 -0
- data/lib/tempmail_sdk/providers/fakemail.rb +143 -0
- 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/haribu.rb +29 -3
- 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/linshiyouxiang_net.rb +85 -0
- data/lib/tempmail_sdk/providers/mail_sunls.rb +42 -1
- data/lib/tempmail_sdk/providers/mail_td.rb +161 -0
- data/lib/tempmail_sdk/providers/mailcat_ai.rb +52 -0
- data/lib/tempmail_sdk/providers/maildrop.rb +79 -4
- data/lib/tempmail_sdk/providers/mailgolem.rb +96 -0
- data/lib/tempmail_sdk/providers/mailinator.rb +9 -2
- data/lib/tempmail_sdk/providers/mailmomy.rb +1 -1
- data/lib/tempmail_sdk/providers/mailtemp_cc.rb +91 -0
- data/lib/tempmail_sdk/providers/mailticking.rb +139 -0
- data/lib/tempmail_sdk/providers/minuteinbox.rb +174 -0
- data/lib/tempmail_sdk/providers/moakt.rb +29 -3
- data/lib/tempmail_sdk/providers/mtempmail.rb +140 -0
- data/lib/tempmail_sdk/providers/mytempmail_cc.rb +76 -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/openinbox.rb +102 -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/smail_pw.rb +156 -0
- data/lib/tempmail_sdk/providers/smails.rb +128 -0
- data/lib/tempmail_sdk/providers/socketio_mail.rb +25 -0
- data/lib/tempmail_sdk/providers/temp_mail_gg.rb +362 -0
- data/lib/tempmail_sdk/providers/tempgbox.rb +118 -0
- data/lib/tempmail_sdk/providers/tempmail100.rb +148 -0
- data/lib/tempmail_sdk/providers/tempmail_cn.rb +111 -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/tenminutemail_net.rb +183 -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/twentyfourmail_chacuo.rb +83 -0
- data/lib/tempmail_sdk/providers/vip_215.rb +171 -0
- data/lib/tempmail_sdk/providers/zerodrop.rb +90 -0
- data/lib/tempmail_sdk/registry.rb +285 -23
- data/lib/tempmail_sdk/types.rb +13 -0
- data/lib/tempmail_sdk/version.rb +1 -1
- data/lib/tempmail_sdk.rb +1 -1
- metadata +58 -6
- data/lib/tempmail_sdk/providers/gonebox_email.rb +0 -89
- data/lib/tempmail_sdk/providers/temp_mail_now.rb +0 -103
- 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
|