import imaplib import email from transformers import BartForConditionalGeneration, BartTokenizer, pipeline
Load pre-trained model and tokenizer for summarization
model_name = 'facebook/bart-large-cnn' tokenizer = BartTokenizer.from_pretrained(model_name) model = BartForConditionalGeneration.from_pretrained(model_name)
Load sentiment analysis model
sentiment_analyzer = pipeline('sentiment-analysis', model='distilbert-base-uncased')
Connect to your email account
mail = imaplib.IMAP4_SSL('imap.gmail.com') # Example for Gmail, adjust accordingly mail.login('[email protected]', 'your_password') mail.select('inbox') # Select the mailbox you want to retrieve emails from
Function to generate summary
def generate_summary(email_text): inputs = tokenizer([email_text], return_tensors='pt', max_length=1024, truncation=True)
with torch.no_grad():
summary_ids = model.generate(**inputs)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
return summary
Search for all emails
status, messages = mail.search(None, 'ALL') message_ids = messages[0].split()
Process and summarize the latest 10 emails received today
for msg_id in message_ids[-10:]: status, msg_data = mail.fetch(msg_id, '(RFC822)') raw_email = msg_data[0][1] msg = email.message_from_bytes(raw_email) sender = msg['From'] subject = msg['subject'] 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:
summary = generate_summary(body)
# Perform sentiment analysis on the summary
sentiment_result = sentiment_analyzer(summary)
label = sentiment_result[0]['label']
score = sentiment_result[0]['score']
print(f"From: {sender}")
print(f"Email Subject: {subject}")
print(f"Generated Summary: {summary}")
print(f"Sentiment: {label}, Score: {score}")
print("-" * 50)
mail.logout()