| import imaplib |
| import email |
| from transformers import BartForConditionalGeneration, BartTokenizer, pipeline |
| import torch |
| import email.header |
|
|
| model_name = 'facebook/bart-large-cnn' |
| tokenizer = BartTokenizer.from_pretrained(model_name) |
| model = BartForConditionalGeneration.from_pretrained(model_name) |
|
|
| sentiment_analyzer = pipeline('sentiment-analysis', model='distilbert-base-uncased') |
|
|
| mail = imaplib.IMAP4_SSL('imap.gmail.com') |
| mail.login('dharsha5678@gmail.com', 'fwqw pnmq ulip umjl') |
| mail.select('inbox') |
|
|
| def generate_summary(email_text, max_length=20): |
| inputs = tokenizer([email_text], return_tensors='pt', max_length=1024, truncation=True) |
|
|
| with torch.no_grad(): |
| summary_ids = model.generate(**inputs, max_length=max_length) |
|
|
| summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True) |
| return summary |
|
|
| from datetime import date |
| today = date.today() |
| today_date = today.strftime("%d-%b-%Y") |
|
|
| status, email_ids = mail.search(None, 'SINCE', today_date) |
| email_ids = email_ids[0].split() |
|
|
| for email_id in email_ids: |
| status, msg_data = mail.fetch(email_id, '(RFC822)') |
| raw_email = msg_data[0][1] |
| msg = email.message_from_bytes(raw_email) |
| sender = msg['From'] |
|
|
| subject = email.header.decode_header(msg['Subject']) |
| subject_str = "" |
| for part, encoding in subject: |
| if isinstance(part, bytes): |
| if encoding: |
| subject_str += part.decode(encoding) |
| else: |
| subject_str += part.decode('utf-8') |
| else: |
| subject_str += part |
|
|
| body = "" |
|
|
| if msg.is_multipart(): |
| for part in msg.walk(): |
| if part.get_content_type() == "text/plain": |
| body = part.get_payload(decode=True).decode() |
| break |
| else: |
| body = msg.get_payload(decode=True).decode() |
|
|
| if body: |
| word_count = len(body.split()) |
| if word_count < 10: |
| summary = body |
| else: |
| if word_count < 50: |
| summary = generate_summary(body, max_length=20) |
| else: |
| summary = generate_summary(body, max_length=50) |
|
|
| sentiment_result = sentiment_analyzer(summary) |
| label = sentiment_result[0]['label'] |
| score = sentiment_result[0]['score'] |
|
|
| if score >= 0.53: |
| email_label = "Important" |
| else: |
| email_label = "Not Important" |
|
|
| print(f"From: {sender}") |
| print(f"Email Subject: {subject_str}") |
| print(f"Generated Summary: {summary}") |
| print(f"Sentiment Label: {email_label}") |
| print(f"Sentiment Score: {score}") |
| print("-" * 50) |
|
|
| mail.logout() |
|
|