[docs]classSendMessageSchema(BaseModel):"""Input for SendMessageTool."""message:str=Field(...,description="The message to send.",)to:Union[str,List[str]]=Field(...,description="The list of recipients.",)subject:str=Field(...,description="The subject of the message.",)cc:Optional[Union[str,List[str]]]=Field(None,description="The list of CC recipients.",)bcc:Optional[Union[str,List[str]]]=Field(None,description="The list of BCC recipients.",)
[docs]classGmailSendMessage(GmailBaseTool):# type: ignore[override, override]"""Tool that sends a message to Gmail."""name:str="send_gmail_message"description:str=("Use this tool to send email messages. The input is the message, recipients")args_schema:Type[SendMessageSchema]=SendMessageSchemadef_prepare_message(self,message:str,to:Union[str,List[str]],subject:str,cc:Optional[Union[str,List[str]]]=None,bcc:Optional[Union[str,List[str]]]=None,)->Dict[str,Any]:"""Create a message for an email."""mime_message=MIMEMultipart()mime_message.attach(MIMEText(message,"html"))mime_message["To"]=", ".join(toifisinstance(to,list)else[to])mime_message["Subject"]=subjectifccisnotNone:mime_message["Cc"]=", ".join(ccifisinstance(cc,list)else[cc])ifbccisnotNone:mime_message["Bcc"]=", ".join(bccifisinstance(bcc,list)else[bcc])encoded_message=base64.urlsafe_b64encode(mime_message.as_bytes()).decode()return{"raw":encoded_message}def_run(self,message:str,to:Union[str,List[str]],subject:str,cc:Optional[Union[str,List[str]]]=None,bcc:Optional[Union[str,List[str]]]=None,run_manager:Optional[CallbackManagerForToolRun]=None,)->str:"""Run the tool."""try:create_message=self._prepare_message(message,to,subject,cc=cc,bcc=bcc)send_message=(self.api_resource.users().messages().send(userId="me",body=create_message))sent_message=send_message.execute()returnf"Message sent. Message Id: {sent_message['id']}"exceptExceptionaserror:raiseException(f"An error occurred: {error}")