Spaces:
Sleeping
Sleeping
File size: 2,474 Bytes
2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 800e08b 2ec2072 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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 68 69 70 71 72 73 74 75 76 |
import gradio as gr
import re
import dns.resolver
from typing import Tuple
def check_syntax(mail_address: str) -> Tuple[bool, str]:
"""์ด๋ฉ์ผ ์ฃผ์ ๊ตฌ๋ฌธ ๊ฒ์ฌ"""
# ๋ ์ ํํ ์ด๋ฉ์ผ ์ ๊ท์ ํจํด
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
match = re.match(pattern, mail_address)
if match:
return True, "โ
์ด๋ฉ์ผ ์ฃผ์ ํ์์ด ์ฌ๋ฐ๋ฆ
๋๋ค."
return False, "โ ์ด๋ฉ์ผ ์ฃผ์ ํ์์ด ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค."
def check_dns(domain: str) -> Tuple[bool, str]:
"""DNS MX ๋ ์ฝ๋ ๊ฒ์ฌ"""
try:
records = dns.resolver.resolve(domain, 'MX') # query ๋์ resolve ์ฌ์ฉ
if records:
return True, "โ
๋๋ฉ์ธ์ ๋ฉ์ผ ์๋ฒ๊ฐ ์กด์ฌํฉ๋๋ค."
return False, "โ ๋๋ฉ์ธ์ ๋ฉ์ผ ์๋ฒ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค."
except Exception as e:
return False, f"โ DNS ํ์ธ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}"
def validate_email(mail_address: str) -> str:
"""์ด๋ฉ์ผ ์ฃผ์ ์ข
ํฉ ๊ฒ์ฆ"""
results = []
# 1. ๊ตฌ๋ฌธ ๊ฒ์ฌ
syntax_valid, syntax_msg = check_syntax(mail_address)
results.append(syntax_msg)
if not syntax_valid:
return "\n".join(results)
# 2. ๋๋ฉ์ธ ์ถ์ถ ๋ฐ DNS ๊ฒ์ฌ
try:
domain = mail_address.split('@')[1]
dns_valid, dns_msg = check_dns(domain)
results.append(dns_msg)
if not dns_valid:
return "\n".join(results)
# ๊ฒ์ฆ ์ฑ๊ณต
results.append("โ
์ด๋ฉ์ผ ์ฃผ์๊ฐ ์ ํจํฉ๋๋ค.")
except Exception as e:
results.append(f"โ ๊ฒ์ฆ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}")
return "\n".join(results)
# Gradio ์ธํฐํ์ด์ค ๊ตฌ์ฑ
iface = gr.Interface(
fn=validate_email,
inputs=gr.Textbox(
label="์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์
๋ ฅํ์ธ์",
placeholder="[email protected]"
),
outputs=gr.Textbox(label="๊ฒ์ฆ ๊ฒฐ๊ณผ"),
title="์ด๋ฉ์ผ ์ฃผ์ ๊ฒ์ฆ ๋๊ตฌ",
description="""
์ด ๋๊ตฌ๋ ๋ค์ ์ฌํญ๋ค์ ๊ฒ์ฆํฉ๋๋ค:
1. ์ด๋ฉ์ผ ์ฃผ์ ํ์ ๊ฒ์ฌ
2. ๋๋ฉ์ธ์ ๋ฉ์ผ ์๋ฒ(MX ๋ ์ฝ๋) ์กด์ฌ ์ฌ๋ถ ํ์ธ
""",
examples=[
["[email protected]"],
["[email protected]"],
["[email protected]"],
["malformed@@email.com"]
],
theme=gr.themes.Soft() # ๋ถ๋๋ฌ์ด ํ
๋ง ์ ์ฉ
)
# ์ ํ๋ฆฌ์ผ์ด์
์คํ
if __name__ == "__main__":
iface.launch() |