mailcheck / app.py
seawolf2357's picture
Update app.py
800e08b verified
raw
history blame
2.47 kB
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()