Module: TempmailSdk::Providers::MailholeDe
- Defined in:
- lib/tempmail_sdk/providers/mailhole_de.rb
Overview
MailholeDe 渠道实现 API: https://mailhole.de 公共临时邮箱,无需认证,token 即邮箱地址本身
Constant Summary collapse
- CHANNEL =
"mailhole-de"- BASE_URL =
"https://mailhole.de"- EMAIL_RE =
从 /api/random 返回的 HTML 中提取邮箱地址
/([a-z0-9.]+@mailhole\.de)/
Class Method Summary collapse
-
.first_str(msg, *keys) ⇒ Object
按优先级从消息字典中提取首个非空字符串值.
-
.generate_email ⇒ EmailInfo
创建 mailhole.de 临时邮箱.
-
.get_emails(email) ⇒ Array<Email>
获取邮件列表.
Class Method Details
.first_str(msg, *keys) ⇒ Object
按优先级从消息字典中提取首个非空字符串值
18 19 20 21 22 23 24 |
# File 'lib/tempmail_sdk/providers/mailhole_de.rb', line 18 def first_str(msg, *keys) keys.each do |key| val = msg[key] return val.to_s if val.is_a?(String) && !val.empty? end "" end |
.generate_email ⇒ EmailInfo
创建 mailhole.de 临时邮箱
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/tempmail_sdk/providers/mailhole_de.rb', line 28 def generate_email resp = Http.get("#{BASE_URL}/api/random", headers: { "Accept" => "text/html" }, timeout: 15) resp.raise_for_status m = resp.body.match(EMAIL_RE) raise "mailhole-de: 无法从响应中解析邮箱地址" unless m email = m[1] EmailInfo.new(channel: CHANNEL, email: email, token: email) end |
.get_emails(email) ⇒ Array<Email>
获取邮件列表
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/tempmail_sdk/providers/mailhole_de.rb', line 42 def get_emails(email) addr = email.to_s.strip raise "mailhole-de: 缺少邮箱地址" if addr.empty? resp = Http.get("#{BASE_URL}/json/#{URI.encode_www_form_component(addr)}", headers: { "Accept" => "application/json" }, timeout: 15) resp.raise_for_status return [] if resp.body.nil? || resp.body.strip.empty? || resp.body.strip == "[]" = resp.json return [] unless .is_a?(Array) .select { |msg| msg.is_a?(Hash) }.map do |msg| row = { "id" => (msg["id"] || "").to_s, "from" => first_str(msg, "sender", "from"), "to" => addr, "subject" => (msg["subject"] || "").to_s, "text" => first_str(msg, "body", "text"), "html" => first_str(msg, "html", "body"), "received_at" => first_str(msg, "date", "received") } Normalize.normalize_email(row, addr) end end |