GiveYouAMail 1.0.0__tar.gz → 1.0.1__tar.gz
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.
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/GiveYouAMail.egg-info/PKG-INFO +2 -2
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/GiveYouAMail.egg-info/SOURCES.txt +3 -1
- giveyouamail-1.0.1/GiveYouAMail.egg-info/entry_points.txt +2 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/PKG-INFO +2 -2
- giveyouamail-1.0.1/README.md +51 -0
- giveyouamail-1.0.1/gyam/gyam.py +111 -0
- giveyouamail-1.0.1/gyam/main_script.py +111 -0
- giveyouamail-1.0.1/setup.py +15 -0
- giveyouamail-1.0.0/GiveYouAMail.egg-info/entry_points.txt +0 -2
- giveyouamail-1.0.0/README.md +0 -1
- giveyouamail-1.0.0/setup.py +0 -2
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/GiveYouAMail.egg-info/dependency_links.txt +0 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/GiveYouAMail.egg-info/requires.txt +0 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/GiveYouAMail.egg-info/top_level.txt +0 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/gyam/30MMCLI.py +0 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/gyam/__init__.py +0 -0
- {giveyouamail-1.0.0 → giveyouamail-1.0.1}/setup.cfg +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
# 📧 GYAM - GiveYouAMail CLI
|
|
3
|
+
|
|
4
|
+
**GYAM** é uma ferramenta de elite para provisionamento de identidades temporárias via terminal. Esqueça o spam no seu e-mail pessoal e pare de caçar contas compartilhadas. Aqui, cada identidade é sua, exclusiva e gerada em segundos.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🛠️ Instalação
|
|
9
|
+
|
|
10
|
+
Para instalar essa joia no seu sistema (Termux ou Linux):
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pip install .
|
|
14
|
+
|
|
15
|
+
Como usar a Máquina
|
|
16
|
+
O GYAM trabalha com dois pilares: Criação e Acesso.
|
|
17
|
+
|
|
18
|
+
1. Criando sua Identidade (Login)
|
|
19
|
+
Para gerar uma conta nova com um domínio ativo e exclusivo:
|
|
20
|
+
|
|
21
|
+
Bash
|
|
22
|
+
GYAM -Login CF -- pswd:SUA_SENHA_AQUI
|
|
23
|
+
|
|
24
|
+
O sistema escolherá um domínio aleatório e seguro.
|
|
25
|
+
|
|
26
|
+
Sua sessão será salva localmente em session.json.
|
|
27
|
+
|
|
28
|
+
Nota: Se quiser um e-mail específico, use M:seu_nome@dominio.com.
|
|
29
|
+
|
|
30
|
+
. Acessando a Inbox (OAuth)
|
|
31
|
+
Uma vez logado, entre no painel de controle:
|
|
32
|
+
|
|
33
|
+
Bash
|
|
34
|
+
GYAM -oauth
|
|
35
|
+
|
|
36
|
+
Controles da TUI (Interface)
|
|
37
|
+
Dentro do painel, você manda na porra toda:
|
|
38
|
+
|
|
39
|
+
SETAS (↑/↓): Navega entre as mensagens recebidas.
|
|
40
|
+
|
|
41
|
+
ENTER: Abre o conteúdo completo do e-mail selecionado.
|
|
42
|
+
|
|
43
|
+
R: Dá um Refresh nervoso para buscar novos e-mails.
|
|
44
|
+
|
|
45
|
+
ESC / B: Volta da leitura para a lista.
|
|
46
|
+
|
|
47
|
+
Q / ESC: Sai da ferramenta e volta para o prompt.
|
|
48
|
+
|
|
49
|
+
(GYAM foi feito para ser rápido, bruto e funcional.
|
|
50
|
+
|
|
51
|
+
Desenvolvido por: MurilooPrDev)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
import requests, sys, re, json, os, curses
|
|
3
|
+
|
|
4
|
+
API = "https://api.mail.tm"
|
|
5
|
+
|
|
6
|
+
def read_msg(stdscr, token, msg_id):
|
|
7
|
+
headers = {"Authorization": f"Bearer {token}"}
|
|
8
|
+
res = requests.get(f"{API}/messages/{msg_id}", headers=headers).json()
|
|
9
|
+
body = res.get('text', res.get('intro', 'Sem conteúdo'))
|
|
10
|
+
|
|
11
|
+
while True:
|
|
12
|
+
stdscr.clear()
|
|
13
|
+
h, w = stdscr.getmaxyx()
|
|
14
|
+
stdscr.attron(curses.color_pair(1))
|
|
15
|
+
stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
|
|
16
|
+
stdscr.addstr(2, 2, f"║ CONTEÚDO DA MENSAGEM {' '*(w-29)}║")
|
|
17
|
+
stdscr.addstr(3, 2, "╚" + "═"*(w-6) + "╝")
|
|
18
|
+
stdscr.attroff(curses.color_pair(1))
|
|
19
|
+
|
|
20
|
+
# Exibe o corpo do e-mail (quebra linha simples)
|
|
21
|
+
lines = body.split('\n')
|
|
22
|
+
for i, line in enumerate(lines[:h-10]):
|
|
23
|
+
stdscr.addstr(5+i, 4, line[:w-8])
|
|
24
|
+
|
|
25
|
+
stdscr.attron(curses.color_pair(3))
|
|
26
|
+
stdscr.addstr(h-2, 2, " [ESC/B] VOLTAR ", curses.A_REVERSE)
|
|
27
|
+
stdscr.attroff(curses.color_pair(3))
|
|
28
|
+
|
|
29
|
+
stdscr.refresh()
|
|
30
|
+
k = stdscr.getch()
|
|
31
|
+
if k in [27, ord('b'), ord('B')]: break
|
|
32
|
+
|
|
33
|
+
def tui_original(stdscr, token, email):
|
|
34
|
+
curses.start_color()
|
|
35
|
+
curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_BLACK)
|
|
36
|
+
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE)
|
|
37
|
+
curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK)
|
|
38
|
+
curses.curs_set(0)
|
|
39
|
+
idx = 0
|
|
40
|
+
|
|
41
|
+
while True:
|
|
42
|
+
stdscr.clear()
|
|
43
|
+
h, w = stdscr.getmaxyx()
|
|
44
|
+
|
|
45
|
+
stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
|
|
46
|
+
stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
|
|
47
|
+
stdscr.addstr(2, 2, f"║ GiveYouAMail CLI {' '*(w-25)}║")
|
|
48
|
+
stdscr.addstr(3, 2, f"║ User: {email.ljust(w-16)} ║")
|
|
49
|
+
stdscr.addstr(4, 2, "╚" + "═"*(w-6) + "╝")
|
|
50
|
+
stdscr.attroff(curses.color_pair(1) | curses.A_BOLD)
|
|
51
|
+
|
|
52
|
+
headers = {"Authorization": f"Bearer {token}"}
|
|
53
|
+
try:
|
|
54
|
+
r = requests.get(f"{API}/messages", headers=headers, timeout=5)
|
|
55
|
+
items = r.json().get('hydra:member', [])
|
|
56
|
+
except: items = []
|
|
57
|
+
|
|
58
|
+
if not items:
|
|
59
|
+
stdscr.addstr(h//2, w//2-9, ">> NO INCOMING <<", curses.A_BOLD)
|
|
60
|
+
else:
|
|
61
|
+
for i, m in enumerate(items[:h-10]):
|
|
62
|
+
style = curses.color_pair(2) if i == idx else curses.A_NORMAL
|
|
63
|
+
sender = m['from']['address'][:20].ljust(22)
|
|
64
|
+
subj = m['subject'][:w-40].ljust(w-40)
|
|
65
|
+
stdscr.addstr(6+i, 4, f" {sender} | {subj} ", style)
|
|
66
|
+
|
|
67
|
+
stdscr.attron(curses.color_pair(3))
|
|
68
|
+
stdscr.addstr(h-2, 2, " [Q] QUIT [R] REFRESH [ENTER] OPEN ", curses.A_REVERSE)
|
|
69
|
+
stdscr.attroff(curses.color_pair(3))
|
|
70
|
+
|
|
71
|
+
stdscr.refresh()
|
|
72
|
+
k = stdscr.getch()
|
|
73
|
+
|
|
74
|
+
if k in [ord('q'), ord('Q'), 27]: break
|
|
75
|
+
elif k == curses.KEY_UP and idx > 0: idx -= 1
|
|
76
|
+
elif k == curses.KEY_DOWN and idx < len(items)-1: idx += 1
|
|
77
|
+
elif k in [10, 13]: # ENTER
|
|
78
|
+
if items:
|
|
79
|
+
read_msg(stdscr, token, items[idx]['id'])
|
|
80
|
+
elif k in [ord('r'), ord('R')]: idx = 0
|
|
81
|
+
|
|
82
|
+
def main():
|
|
83
|
+
raw = " ".join(sys.argv)
|
|
84
|
+
m_mail = re.search(r'M:[\s"]*([^\s"]+)', raw)
|
|
85
|
+
m_pswd = re.search(r'pswd:[\s"]*([^\s"]+)', raw)
|
|
86
|
+
|
|
87
|
+
if "-Login" in raw:
|
|
88
|
+
if not m_pswd: return
|
|
89
|
+
try:
|
|
90
|
+
doms = requests.get(f"{API}/domains").json()['hydra:member']
|
|
91
|
+
target_dom = doms[0]['domain']
|
|
92
|
+
except: target_dom = "moakt.cc"
|
|
93
|
+
email = m_mail.group(1) if m_mail else f"user_{os.urandom(2).hex()}@{target_dom}"
|
|
94
|
+
pswd = m_pswd.group(1)
|
|
95
|
+
res = requests.post(f"{API}/accounts", json={"address": email, "password": pswd})
|
|
96
|
+
if res.status_code in [201, 200, 422]:
|
|
97
|
+
with open("session.json", "w") as f:
|
|
98
|
+
json.dump({"email": email, "password": pswd}, f)
|
|
99
|
+
print(f"Sessão Criada: {email}")
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
if "-oauth" in raw:
|
|
103
|
+
if not os.path.exists("session.json"): return
|
|
104
|
+
with open("session.json", "r") as f:
|
|
105
|
+
s = json.load(f); email, pswd = s['email'], s['password']
|
|
106
|
+
res = requests.post(f"{API}/token", json={"address": email, "password": pswd})
|
|
107
|
+
if res.status_code == 200:
|
|
108
|
+
curses.wrapper(tui_original, res.json()['token'], email)
|
|
109
|
+
|
|
110
|
+
if __name__ == "__main__":
|
|
111
|
+
main()
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
import requests, sys, re, json, os, curses
|
|
3
|
+
|
|
4
|
+
API = "https://api.mail.tm"
|
|
5
|
+
|
|
6
|
+
def read_msg(stdscr, token, msg_id):
|
|
7
|
+
headers = {"Authorization": f"Bearer {token}"}
|
|
8
|
+
res = requests.get(f"{API}/messages/{msg_id}", headers=headers).json()
|
|
9
|
+
body = res.get('text', res.get('intro', 'Sem conteúdo'))
|
|
10
|
+
|
|
11
|
+
while True:
|
|
12
|
+
stdscr.clear()
|
|
13
|
+
h, w = stdscr.getmaxyx()
|
|
14
|
+
stdscr.attron(curses.color_pair(1))
|
|
15
|
+
stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
|
|
16
|
+
stdscr.addstr(2, 2, f"║ CONTEÚDO DA MENSAGEM {' '*(w-29)}║")
|
|
17
|
+
stdscr.addstr(3, 2, "╚" + "═"*(w-6) + "╝")
|
|
18
|
+
stdscr.attroff(curses.color_pair(1))
|
|
19
|
+
|
|
20
|
+
# Exibe o corpo do e-mail (quebra linha simples)
|
|
21
|
+
lines = body.split('\n')
|
|
22
|
+
for i, line in enumerate(lines[:h-10]):
|
|
23
|
+
stdscr.addstr(5+i, 4, line[:w-8])
|
|
24
|
+
|
|
25
|
+
stdscr.attron(curses.color_pair(3))
|
|
26
|
+
stdscr.addstr(h-2, 2, " [ESC/B] VOLTAR ", curses.A_REVERSE)
|
|
27
|
+
stdscr.attroff(curses.color_pair(3))
|
|
28
|
+
|
|
29
|
+
stdscr.refresh()
|
|
30
|
+
k = stdscr.getch()
|
|
31
|
+
if k in [27, ord('b'), ord('B')]: break
|
|
32
|
+
|
|
33
|
+
def tui_original(stdscr, token, email):
|
|
34
|
+
curses.start_color()
|
|
35
|
+
curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_BLACK)
|
|
36
|
+
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE)
|
|
37
|
+
curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK)
|
|
38
|
+
curses.curs_set(0)
|
|
39
|
+
idx = 0
|
|
40
|
+
|
|
41
|
+
while True:
|
|
42
|
+
stdscr.clear()
|
|
43
|
+
h, w = stdscr.getmaxyx()
|
|
44
|
+
|
|
45
|
+
stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
|
|
46
|
+
stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
|
|
47
|
+
stdscr.addstr(2, 2, f"║ GiveYouAMail CLI {' '*(w-25)}║")
|
|
48
|
+
stdscr.addstr(3, 2, f"║ User: {email.ljust(w-16)} ║")
|
|
49
|
+
stdscr.addstr(4, 2, "╚" + "═"*(w-6) + "╝")
|
|
50
|
+
stdscr.attroff(curses.color_pair(1) | curses.A_BOLD)
|
|
51
|
+
|
|
52
|
+
headers = {"Authorization": f"Bearer {token}"}
|
|
53
|
+
try:
|
|
54
|
+
r = requests.get(f"{API}/messages", headers=headers, timeout=5)
|
|
55
|
+
items = r.json().get('hydra:member', [])
|
|
56
|
+
except: items = []
|
|
57
|
+
|
|
58
|
+
if not items:
|
|
59
|
+
stdscr.addstr(h//2, w//2-9, ">> NO INCOMING <<", curses.A_BOLD)
|
|
60
|
+
else:
|
|
61
|
+
for i, m in enumerate(items[:h-10]):
|
|
62
|
+
style = curses.color_pair(2) if i == idx else curses.A_NORMAL
|
|
63
|
+
sender = m['from']['address'][:20].ljust(22)
|
|
64
|
+
subj = m['subject'][:w-40].ljust(w-40)
|
|
65
|
+
stdscr.addstr(6+i, 4, f" {sender} | {subj} ", style)
|
|
66
|
+
|
|
67
|
+
stdscr.attron(curses.color_pair(3))
|
|
68
|
+
stdscr.addstr(h-2, 2, " [Q] QUIT [R] REFRESH [ENTER] OPEN ", curses.A_REVERSE)
|
|
69
|
+
stdscr.attroff(curses.color_pair(3))
|
|
70
|
+
|
|
71
|
+
stdscr.refresh()
|
|
72
|
+
k = stdscr.getch()
|
|
73
|
+
|
|
74
|
+
if k in [ord('q'), ord('Q'), 27]: break
|
|
75
|
+
elif k == curses.KEY_UP and idx > 0: idx -= 1
|
|
76
|
+
elif k == curses.KEY_DOWN and idx < len(items)-1: idx += 1
|
|
77
|
+
elif k in [10, 13]: # ENTER
|
|
78
|
+
if items:
|
|
79
|
+
read_msg(stdscr, token, items[idx]['id'])
|
|
80
|
+
elif k in [ord('r'), ord('R')]: idx = 0
|
|
81
|
+
|
|
82
|
+
def main():
|
|
83
|
+
raw = " ".join(sys.argv)
|
|
84
|
+
m_mail = re.search(r'M:[\s"]*([^\s"]+)', raw)
|
|
85
|
+
m_pswd = re.search(r'pswd:[\s"]*([^\s"]+)', raw)
|
|
86
|
+
|
|
87
|
+
if "-Login" in raw:
|
|
88
|
+
if not m_pswd: return
|
|
89
|
+
try:
|
|
90
|
+
doms = requests.get(f"{API}/domains").json()['hydra:member']
|
|
91
|
+
target_dom = doms[0]['domain']
|
|
92
|
+
except: target_dom = "moakt.cc"
|
|
93
|
+
email = m_mail.group(1) if m_mail else f"user_{os.urandom(2).hex()}@{target_dom}"
|
|
94
|
+
pswd = m_pswd.group(1)
|
|
95
|
+
res = requests.post(f"{API}/accounts", json={"address": email, "password": pswd})
|
|
96
|
+
if res.status_code in [201, 200, 422]:
|
|
97
|
+
with open("session.json", "w") as f:
|
|
98
|
+
json.dump({"email": email, "password": pswd}, f)
|
|
99
|
+
print(f"Sessão Criada: {email}")
|
|
100
|
+
return
|
|
101
|
+
|
|
102
|
+
if "-oauth" in raw:
|
|
103
|
+
if not os.path.exists("session.json"): return
|
|
104
|
+
with open("session.json", "r") as f:
|
|
105
|
+
s = json.load(f); email, pswd = s['email'], s['password']
|
|
106
|
+
res = requests.post(f"{API}/token", json={"address": email, "password": pswd})
|
|
107
|
+
if res.status_code == 200:
|
|
108
|
+
curses.wrapper(tui_original, res.json()['token'], email)
|
|
109
|
+
|
|
110
|
+
if __name__ == "__main__":
|
|
111
|
+
main()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name='GiveYouAMail',
|
|
5
|
+
version='1.0.1',
|
|
6
|
+
packages=find_packages(),
|
|
7
|
+
install_requires=['requests'],
|
|
8
|
+
entry_points={
|
|
9
|
+
'console_scripts': [
|
|
10
|
+
'GYAM=gyam.main_script:main'
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
author='MurilooPrDev',
|
|
14
|
+
description='CLI Temporary Email Tool - GYAM Edition'
|
|
15
|
+
)
|
giveyouamail-1.0.0/README.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# GiveYouAMail
|
giveyouamail-1.0.0/setup.py
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|