Module: TempmailSdk::Providers::Inboxes
- Defined in:
- lib/tempmail_sdk/providers/inboxes.rb
Overview
inboxes.com 渠道实现
Constant Summary collapse
- CHANNEL =
"inboxes"- API_BASE =
"https://inboxes.com/api/v2"- DEFAULT_DOMAIN =
"blondmail.com"- HEADERS =
{ "Accept" => "application/json", "Origin" => "https://inboxes.com", "Referer" => "https://inboxes.com/", "User-Agent" => "Mozilla/5.0" }.freeze
Class Method Summary collapse
- .fetch_detail(uid) ⇒ Object
- .flatten(raw, recipient) ⇒ Object
- .generate_email(domain = nil) ⇒ EmailInfo
-
.get_domains ⇒ Object
获取可用域名列表.
- .get_emails(email) ⇒ Array<Email>
- .pick_domain(domains, preferred) ⇒ Object
- .random_local ⇒ Object
Class Method Details
.fetch_detail(uid) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 70 def fetch_detail(uid) return nil if uid.to_s.strip.empty? begin resp = Http.get( "#{API_BASE}/message/#{URI.encode_www_form_component(uid)}", headers: HEADERS, timeout: 15 ) return nil unless resp.ok? data = resp.json data.is_a?(Hash) ? data : nil rescue StandardError nil end end |
.flatten(raw, recipient) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 47 def flatten(raw, recipient) { "id" => (raw["uid"] || "").to_s, "from" => (raw["sf"] || raw["f"] || "").to_s, "to" => (raw["ib"] || recipient).to_s, "subject" => (raw["s"] || "").to_s, "text" => (raw["text"] || "").to_s, "html" => (raw["html"] || "").to_s, "preview_text" => (raw["ph"] || "").to_s, "date" => (raw["cr"] || "").to_s, "isRead" => !!raw["ru"], "attachments" => raw["at"].is_a?(Array) ? raw["at"] : [] } end |
.generate_email(domain = nil) ⇒ EmailInfo
64 65 66 67 68 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 64 def generate_email(domain = nil) domains = get_domains selected = pick_domain(domains, domain) EmailInfo.new(channel: CHANNEL, email: "#{random_local}@#{selected}") end |
.get_domains ⇒ Object
获取可用域名列表
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 25 def get_domains resp = Http.get("#{API_BASE}/domain", headers: HEADERS, timeout: 15) resp.raise_for_status data = resp.json items = data.is_a?(Hash) ? (data["domains"] || []) : [] domains = items.select { |i| i.is_a?(Hash) && !i["qdn"].to_s.strip.empty? } .map { |i| i["qdn"].to_s.strip } raise "inboxes: no domains" if domains.empty? domains end |
.get_emails(email) ⇒ Array<Email>
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 89 def get_emails(email) address = email.to_s.strip raise "inboxes: empty email" if address.empty? resp = Http.get( "#{API_BASE}/inbox/#{URI.encode_www_form_component(address)}", headers: HEADERS, timeout: 15 ) resp.raise_for_status data = resp.json rows = data.is_a?(Hash) ? (data["msgs"] || []) : [] return [] unless rows.is_a?(Array) rows.select { |r| r.is_a?(Hash) }.map do |row| uid = (row["uid"] || "").to_s.strip detail = uid.empty? ? nil : fetch_detail(uid) Normalize.normalize_email(flatten(detail || row, address), address) end end |
.pick_domain(domains, preferred) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 37 def pick_domain(domains, preferred) wanted = preferred.to_s.strip.delete_prefix("@").downcase unless wanted.empty? domains.each { |d| return d if d.downcase == wanted } end return DEFAULT_DOMAIN if domains.include?(DEFAULT_DOMAIN) domains.first end |
.random_local ⇒ Object
19 20 21 22 |
# File 'lib/tempmail_sdk/providers/inboxes.rb', line 19 def random_local chars = "abcdefghijklmnopqrstuvwxyz0123456789".chars "sdk" + Array.new(16) { chars.sample }.join end |