Module: TempmailSdk::Providers::Harakirimail

Defined in:
lib/tempmail_sdk/providers/harakirimail.rb

Overview

harakirimail.com 渠道实现 无需认证、无需 Cookie、无需 Token 的简单 REST API

Constant Summary collapse

CHANNEL =
"harakirimail"
BASE =
"https://harakirimail.com"
HEADERS =
{
  "Accept" => "application/json, text/plain, */*",
  "Accept-Language" => "zh-CN,zh;q=0.9,en;q=0.8",
  "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " \
                  "(KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0"
}.freeze

Class Method Summary collapse

Class Method Details

.fetch_body(email_id) ⇒ Object

获取单封邮件正文



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/tempmail_sdk/providers/harakirimail.rb', line 37

def fetch_body(email_id)
  return {} if email_id.to_s.empty?

  begin
    resp = Http.get("#{BASE}/api/v1/email/#{email_id}", headers: HEADERS, timeout: 15)
    resp.raise_for_status
    data = resp.json
    data.is_a?(Hash) ? data : {}
  rescue StandardError
    {}
  end
end

.generate_emailEmailInfo

Returns:



25
26
27
28
29
30
31
32
33
34
# File 'lib/tempmail_sdk/providers/harakirimail.rb', line 25

def generate_email
  name = random_name
  email = "#{name}@harakirimail.com"

  # 调用收件箱接口验证地址可用
  resp = Http.get("#{BASE}/api/v1/inbox/#{name}", headers: HEADERS, timeout: 15)
  resp.raise_for_status

  EmailInfo.new(channel: CHANNEL, email: email)
end

.get_emails(email) ⇒ Array<Email>

Parameters:

  • email (String)

Returns:



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/tempmail_sdk/providers/harakirimail.rb', line 52

def get_emails(email)
  e = email.to_s.strip
  raise "harakirimail: empty email" if e.empty?

  name = e.include?("@") ? e.split("@").first.to_s : e

  resp = Http.get("#{BASE}/api/v1/inbox/#{name}", headers: HEADERS, timeout: 15)
  resp.raise_for_status
  data = resp.json
  return [] unless data.is_a?(Hash)

  rows = data["emails"]
  return [] unless rows.is_a?(Array)

  rows.select { |r| r.is_a?(Hash) }.map do |raw|
    email_id = raw["_id"].to_s
    detail = fetch_body(email_id)
    flat = {
      "id" => email_id,
      "from" => raw["from"].to_s,
      "to" => e,
      "subject" => raw["subject"].to_s,
      "date" => raw["received"].to_s,
      "html" => (detail["body_html"] || detail["html"]).to_s,
      "text" => (detail["body_text"] || detail["text"]).to_s,
      "isRead" => false
    }
    Normalize.normalize_email(flat, e)
  end
end

.random_name(length = 12) ⇒ Object



19
20
21
22
# File 'lib/tempmail_sdk/providers/harakirimail.rb', line 19

def random_name(length = 12)
  chars = ("a".."z").to_a + ("0".."9").to_a
  Array.new(length) { chars.sample }.join
end