seawolf2357 commited on
Commit
800e08b
ยท
verified ยท
1 Parent(s): 2f0ef1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -49
app.py CHANGED
@@ -1,77 +1,74 @@
1
  import gradio as gr
2
  import re
3
  import dns.resolver
4
- import socket
5
- import smtplib
6
- from typing import Tuple, Union
7
 
8
- def check_syntax(mail_address: str) -> bool:
9
  """์ด๋ฉ”์ผ ์ฃผ์†Œ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ"""
10
- match = re.match('[A-Za-z0-9._+]+@[A-Za-z]+.[A-Za-z]', mail_address)
11
- return match is not None
 
 
 
 
12
 
13
  def check_dns(domain: str) -> Tuple[bool, str]:
14
  """DNS MX ๋ ˆ์ฝ”๋“œ ๊ฒ€์‚ฌ"""
15
  try:
16
- records = dns.resolver.query(domain, 'MX')
17
- mx_record = str(records[0].exchange)
18
- return True, mx_record
 
19
  except Exception as e:
20
- return False, str(e)
21
-
22
- def check_smtp(mail_address: str, mx_record: str) -> bool:
23
- """SMTP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ๊ฒ€์‚ฌ"""
24
- try:
25
- local_host = socket.gethostname()
26
- server = smtplib.SMTP(timeout=10)
27
- server.set_debuglevel(0)
28
- server.connect(mx_record)
29
- server.helo(local_host)
30
- server.mail('test_test_test@yahoo.co.jp')
31
- code, message = server.rcpt(str(mail_address))
32
- server.quit()
33
- return code == 250
34
- except Exception:
35
- return False
36
 
37
  def validate_email(mail_address: str) -> str:
38
  """์ด๋ฉ”์ผ ์ฃผ์†Œ ์ข…ํ•ฉ ๊ฒ€์ฆ"""
39
- # ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€ ์ดˆ๊ธฐํ™”
40
- result_messages = []
41
 
42
  # 1. ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ
43
- if not check_syntax(mail_address):
44
- return "โŒ ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
45
- result_messages.append("โœ… ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค.")
46
-
47
- # 2. ๋„๋ฉ”์ธ ์ถ”์ถœ
48
- domain = mail_address.split('@')[1]
49
 
50
- # 3. DNS MX ๋ ˆ์ฝ”๋“œ ๊ฒ€์‚ฌ
51
- dns_valid, mx_record = check_dns(domain)
52
- if not dns_valid:
53
- return "\n".join(result_messages + ["โŒ ๋„๋ฉ”์ธ์˜ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."])
54
- result_messages.append("โœ… ๋„๋ฉ”์ธ์˜ ๋ฉ”์ผ ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.")
55
-
56
- # 4. SMTP ๊ฒ€์‚ฌ
57
- if not check_smtp(mail_address, mx_record):
58
- return "\n".join(result_messages + ["โŒ ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."])
59
- result_messages.append("โœ… ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.")
 
 
 
60
 
61
- return "\n".join(result_messages)
62
 
63
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
64
  iface = gr.Interface(
65
  fn=validate_email,
66
- inputs=gr.Textbox(label="์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", placeholder="example@domain.com"),
 
 
 
67
  outputs=gr.Textbox(label="๊ฒ€์ฆ ๊ฒฐ๊ณผ"),
68
  title="์ด๋ฉ”์ผ ์ฃผ์†Œ ๊ฒ€์ฆ ๋„๊ตฌ",
69
- description="์ž…๋ ฅ๋œ ์ด๋ฉ”์ผ ์ฃผ์†Œ์˜ ์œ ํšจ์„ฑ์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์— ๊ฑธ์ณ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.",
 
 
 
 
70
  examples=[
71
- ["test@example.com"],
72
- ["invalid.email@nonexistent.domain"],
 
73
  ["malformed@@email.com"]
74
- ]
 
75
  )
76
 
77
  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
 
1
  import gradio as gr
2
  import re
3
  import dns.resolver
4
+ from typing import Tuple
 
 
5
 
6
+ def check_syntax(mail_address: str) -> Tuple[bool, str]:
7
  """์ด๋ฉ”์ผ ์ฃผ์†Œ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ"""
8
+ # ๋” ์ •ํ™•ํ•œ ์ด๋ฉ”์ผ ์ •๊ทœ์‹ ํŒจํ„ด
9
+ pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
10
+ match = re.match(pattern, mail_address)
11
+ if match:
12
+ return True, "โœ… ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค."
13
+ return False, "โŒ ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
14
 
15
  def check_dns(domain: str) -> Tuple[bool, str]:
16
  """DNS MX ๋ ˆ์ฝ”๋“œ ๊ฒ€์‚ฌ"""
17
  try:
18
+ records = dns.resolver.resolve(domain, 'MX') # query ๋Œ€์‹  resolve ์‚ฌ์šฉ
19
+ if records:
20
+ return True, "โœ… ๋„๋ฉ”์ธ์˜ ๋ฉ”์ผ ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."
21
+ return False, "โŒ ๋„๋ฉ”์ธ์˜ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
22
  except Exception as e:
23
+ return False, f"โŒ DNS ํ™•์ธ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  def validate_email(mail_address: str) -> str:
26
  """์ด๋ฉ”์ผ ์ฃผ์†Œ ์ข…ํ•ฉ ๊ฒ€์ฆ"""
27
+ results = []
 
28
 
29
  # 1. ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ
30
+ syntax_valid, syntax_msg = check_syntax(mail_address)
31
+ results.append(syntax_msg)
32
+ if not syntax_valid:
33
+ return "\n".join(results)
 
 
34
 
35
+ # 2. ๋„๋ฉ”์ธ ์ถ”์ถœ ๋ฐ DNS ๊ฒ€์‚ฌ
36
+ try:
37
+ domain = mail_address.split('@')[1]
38
+ dns_valid, dns_msg = check_dns(domain)
39
+ results.append(dns_msg)
40
+ if not dns_valid:
41
+ return "\n".join(results)
42
+
43
+ # ๊ฒ€์ฆ ์„ฑ๊ณต
44
+ results.append("โœ… ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.")
45
+
46
+ except Exception as e:
47
+ results.append(f"โŒ ๊ฒ€์ฆ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
48
 
49
+ return "\n".join(results)
50
 
51
  # Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
52
  iface = gr.Interface(
53
  fn=validate_email,
54
+ inputs=gr.Textbox(
55
+ label="์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”",
56
+ placeholder="example@domain.com"
57
+ ),
58
  outputs=gr.Textbox(label="๊ฒ€์ฆ ๊ฒฐ๊ณผ"),
59
  title="์ด๋ฉ”์ผ ์ฃผ์†Œ ๊ฒ€์ฆ ๋„๊ตฌ",
60
+ description="""
61
+ ์ด ๋„๊ตฌ๋Š” ๋‹ค์Œ ์‚ฌํ•ญ๋“ค์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค:
62
+ 1. ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹ ๊ฒ€์‚ฌ
63
+ 2. ๋„๋ฉ”์ธ์˜ ๋ฉ”์ผ ์„œ๋ฒ„(MX ๋ ˆ์ฝ”๋“œ) ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
64
+ """,
65
  examples=[
66
+ ["test@gmail.com"],
67
+ ["user@yahoo.com"],
68
+ ["invalid@nonexistent.domain"],
69
  ["malformed@@email.com"]
70
+ ],
71
+ theme=gr.themes.Soft() # ๋ถ€๋“œ๋Ÿฌ์šด ํ…Œ๋งˆ ์ ์šฉ
72
  )
73
 
74
  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰