Skip to main content
Glama
message_info.py4.66 kB
from dataclasses import dataclass, field from typing import List, Optional from datetime import datetime @dataclass class MessageInfo: """Simple dataclass to encapsulate important message attributes""" id: str subject: str received_time: Optional[datetime] = None sender_name: Optional[str] = None sender_email: Optional[str] = None recipients: List[str] = field(default_factory=list) cc_recipients: List[str] = field(default_factory=list) bcc_recipients: List[str] = field(default_factory=list) body: str = "" is_read: bool = False has_attachments: bool = False importance: str = "normal" conversation_id: Optional[str] = None def __init__(self, message): """Initialize from a GraphController API message object""" self.id = message.id self.subject = message.subject or "(No subject)" self.received_time = message.received_date_time if hasattr(message, 'received_date_time') else None # Extract sender info self.sender_name = None self.sender_email = None if hasattr(message, 'from') and message.from_ and message.from_.email_address: self.sender_name = message.from_.email_address.name self.sender_email = message.from_.email_address.address # Extract recipients self.recipients = [] self.cc_recipients = [] self.bcc_recipients = [] if message.to_recipients: for recipient in message.to_recipients: if recipient.email_address and recipient.email_address.address: self.recipients.append(f"{recipient.email_address.name or ''} <{recipient.email_address.address}>") if hasattr(message, 'cc_recipients') and message.cc_recipients: for recipient in message.cc_recipients: if recipient.email_address and recipient.email_address.address: self.cc_recipients.append( f"{recipient.email_address.name or ''} <{recipient.email_address.address}>") if hasattr(message, 'bcc_recipients') and message.bcc_recipients: for recipient in message.bcc_recipients: if recipient.email_address and recipient.email_address.address: self.bcc_recipients.append( f"{recipient.email_address.name or ''} <{recipient.email_address.address}>") # Extract body self.body = "" if hasattr(message, 'body') and message.body: self.body = message.body.content or "" # Other properties self.is_read = message.is_read if hasattr(message, 'is_read') else False self.has_attachments = message.has_attachments if hasattr(message, 'has_attachments') else False # Extract importance self.importance = "normal" if hasattr(message, 'importance'): self.importance = str(message.importance).lower() if message.importance else "normal" self.conversation_id = message.conversation_id if hasattr(message, 'conversation_id') else None def to_dict(self): """Convert to dictionary for easy JSON serialization""" return { "id": self.id, "subject": self.subject, "received_time": self.received_time.isoformat() if self.received_time else None, "sender": { "name": self.sender_name, "email": self.sender_email }, "recipients": self.recipients, "cc_recipients": self.cc_recipients, "bcc_recipients": self.bcc_recipients, "body": self.body, "is_read": self.is_read, "has_attachments": self.has_attachments, "importance": self.importance, "conversation_id": self.conversation_id } def to_string(self): """Format the message as a readable string""" result = f"Subject: {self.subject}\n" result += f"From: {self.sender_name} <{self.sender_email}>\n" if self.sender_name and self.sender_email else "" result += f"Received: {self.received_time}\n" if self.received_time else "" result += f"Status: {'Read' if self.is_read else 'Unread'}\n" result += f"Importance: {self.importance.capitalize()}\n" if self.recipients: result += f"To: {', '.join(self.recipients)}\n" if self.cc_recipients: result += f"CC: {', '.join(self.cc_recipients)}\n" if self.has_attachments: result += f"Has Attachments: Yes\n" result += f"Body:\n" result += self.body return result

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Norcim133/OutlookMCPServer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server