mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-01 20:03:28 +02:00
Merge pull request #864 from FromCSUZhou/code_interpreter
add email_login tool and add email summarization scenario example
This commit is contained in:
commit
77f0e54756
5 changed files with 146 additions and 1 deletions
|
|
@ -10,6 +10,14 @@ from metagpt.tools.libs import (
|
|||
sd_engine,
|
||||
gpt_v_generator,
|
||||
web_scraping,
|
||||
email_login,
|
||||
)
|
||||
|
||||
_ = data_preprocess, feature_engineering, sd_engine, gpt_v_generator, web_scraping # Avoid pre-commit error
|
||||
_ = (
|
||||
data_preprocess,
|
||||
feature_engineering,
|
||||
sd_engine,
|
||||
gpt_v_generator,
|
||||
web_scraping,
|
||||
email_login,
|
||||
) # Avoid pre-commit error
|
||||
|
|
|
|||
58
metagpt/tools/libs/email_login.py
Normal file
58
metagpt/tools/libs/email_login.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
from imap_tools import MailBox
|
||||
|
||||
from metagpt.logs import logger
|
||||
from metagpt.tools.tool_registry import register_tool
|
||||
from metagpt.tools.tool_type import ToolType
|
||||
|
||||
# Define a dictionary mapping email domains to their IMAP server addresses
|
||||
IMAP_SERVERS = {
|
||||
"outlook.com": "imap-mail.outlook.com", # Outlook
|
||||
"163.com": "imap.163.com", # 163 Mail
|
||||
"qq.com": "imap.qq.com", # QQ Mail
|
||||
"gmail.com": "imap.gmail.com", # Gmail
|
||||
"yahoo.com": "imap.mail.yahoo.com", # Yahoo Mail
|
||||
"icloud.com": "imap.mail.me.com", # iCloud Mail
|
||||
"hotmail.com": "imap-mail.outlook.com", # Hotmail (同 Outlook)
|
||||
"live.com": "imap-mail.outlook.com", # Live (同 Outlook)
|
||||
"sina.com": "imap.sina.com", # Sina Mail
|
||||
"sohu.com": "imap.sohu.com", # Sohu Mail
|
||||
"yahoo.co.jp": "imap.mail.yahoo.co.jp", # Yahoo Mail Japan
|
||||
"yandex.com": "imap.yandex.com", # Yandex Mail
|
||||
"mail.ru": "imap.mail.ru", # Mail.ru
|
||||
"aol.com": "imap.aol.com", # AOL Mail
|
||||
"gmx.com": "imap.gmx.com", # GMX Mail
|
||||
"zoho.com": "imap.zoho.com", # Zoho Mail
|
||||
}
|
||||
|
||||
|
||||
@register_tool(tool_type=ToolType.EMAIL_LOGIN.type_name)
|
||||
def email_login_imap(email_address, email_password):
|
||||
"""
|
||||
Use imap_tools package to log in to your email (the email that supports IMAP protocol) to verify and return the account object.
|
||||
|
||||
Args:
|
||||
email_address (str): Email address that needs to be logged in and linked.
|
||||
email_password (str): Password for the email address that needs to be logged in and linked.
|
||||
|
||||
Returns:
|
||||
object: The imap_tools's MailBox object returned after successfully connecting to the mailbox through imap_tools, including various information about this account (email, etc.), or None if login fails.
|
||||
"""
|
||||
|
||||
# Extract the domain from the email address
|
||||
domain = email_address.split("@")[-1]
|
||||
|
||||
# Determine the correct IMAP server
|
||||
imap_server = IMAP_SERVERS.get(domain)
|
||||
|
||||
if not imap_server:
|
||||
logger.error(f"IMAP server for {domain} not found.")
|
||||
return None
|
||||
|
||||
# Attempt to log in to the email account
|
||||
try:
|
||||
mailbox = MailBox(imap_server).login(email_address, email_password)
|
||||
logger.info("Login successful")
|
||||
return mailbox
|
||||
except Exception as e:
|
||||
logger.error(f"Login failed: {e}")
|
||||
return None
|
||||
|
|
@ -22,6 +22,10 @@ class ToolType(Enum):
|
|||
desc="Only for changing value inplace.",
|
||||
usage_prompt=DATA_PREPROCESS_PROMPT,
|
||||
)
|
||||
EMAIL_LOGIN = ToolTypeDef(
|
||||
name="email_login",
|
||||
desc="For logging to an email.",
|
||||
)
|
||||
FEATURE_ENGINEERING = ToolTypeDef(
|
||||
name="feature_engineering",
|
||||
desc="Only for creating new columns for input data.",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue