| 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() | |