Initial commit: Gmail Automation RPA
Gmail API를 활용한 이메일 자동화 RPA 프로그램 Features: - Gmail API 인증 및 연동 - 키워드/발신자 기반 자동 분류 - 조건별 자동 답장 기능 - 통계 리포트 생성 - 커스터마이징 가능한 JSON 설정 Modules: - gmail_automation.py: 메인 프로그램 - gmail_auth.py: Gmail API 인증 - email_classifier.py: 이메일 분류 로직 - auto_reply.py: 자동 답장 로직 - config.json.example: 설정 예시 Documentation: - 상세한 README.md (설치, 사용법, 트러블슈팅) - Google Cloud Console 설정 가이드 - 실제 효과 측정 데이터
This commit is contained in:
102
email_classifier.py
Normal file
102
email_classifier.py
Normal file
@@ -0,0 +1,102 @@
|
||||
"""
|
||||
이메일 분류 모듈
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
|
||||
class EmailClassifier:
|
||||
"""이메일 자동 분류 클래스"""
|
||||
|
||||
def __init__(self, config):
|
||||
"""
|
||||
초기화
|
||||
|
||||
Args:
|
||||
config: 분류 규칙이 포함된 설정
|
||||
"""
|
||||
self.rules = config.get('classification_rules', [])
|
||||
|
||||
def classify(self, email_data):
|
||||
"""
|
||||
이메일 분류
|
||||
|
||||
Args:
|
||||
email_data: 이메일 정보 (subject, sender, body)
|
||||
|
||||
Returns:
|
||||
분류 카테고리 정보 또는 None
|
||||
"""
|
||||
subject = email_data.get('subject', '').lower()
|
||||
sender = email_data.get('sender', '').lower()
|
||||
body = email_data.get('body', '').lower()
|
||||
snippet = email_data.get('snippet', '').lower()
|
||||
|
||||
# 전체 텍스트
|
||||
full_text = f"{subject} {body} {snippet}"
|
||||
|
||||
for rule in self.rules:
|
||||
# 키워드 검사
|
||||
keywords = rule.get('keywords', [])
|
||||
if keywords:
|
||||
if any(keyword.lower() in full_text for keyword in keywords):
|
||||
return rule
|
||||
|
||||
# 발신자 도메인 검사
|
||||
from_domains = rule.get('from_domains', [])
|
||||
if from_domains:
|
||||
sender_domain = self.extract_domain(sender)
|
||||
if sender_domain in from_domains:
|
||||
return rule
|
||||
|
||||
# 정규식 패턴 검사
|
||||
patterns = rule.get('patterns', [])
|
||||
if patterns:
|
||||
for pattern in patterns:
|
||||
if re.search(pattern, full_text):
|
||||
return rule
|
||||
|
||||
return None
|
||||
|
||||
def extract_domain(self, email_address):
|
||||
"""이메일 주소에서 도메인 추출"""
|
||||
match = re.search(r'@([\w\.-]+)', email_address)
|
||||
if match:
|
||||
return match.group(1).lower()
|
||||
return ''
|
||||
|
||||
def get_priority(self, email_data):
|
||||
"""이메일 우선순위 판단"""
|
||||
category = self.classify(email_data)
|
||||
|
||||
if category:
|
||||
priority = category.get('priority', 'normal')
|
||||
return priority
|
||||
|
||||
return 'normal'
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 테스트
|
||||
config = {
|
||||
"classification_rules": [
|
||||
{
|
||||
"name": "업무",
|
||||
"keywords": ["회의", "프로젝트"],
|
||||
"label": "업무/중요",
|
||||
"priority": "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
classifier = EmailClassifier(config)
|
||||
|
||||
test_email = {
|
||||
'subject': '프로젝트 회의 일정',
|
||||
'sender': 'test@company.com',
|
||||
'body': '내일 오전 10시 회의',
|
||||
'snippet': ''
|
||||
}
|
||||
|
||||
result = classifier.classify(test_email)
|
||||
print(f"분류 결과: {result}")
|
||||
Reference in New Issue
Block a user