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

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_emailEmailInfo

创建 mailhole.de 临时邮箱

Returns:



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>

获取邮件列表

Parameters:

  • email (String)

Returns:



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 == "[]"

  messages = resp.json
  return [] unless messages.is_a?(Array)

  messages.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