send_forward
Forward emails to new recipients with optional comments and HTML formatting using the Mail MCP Server's email management capabilities.
Instructions
Forward an email to another recipient
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Forward recipient addresses | |
| subject | Yes | Forward subject (usually with Fwd:) | |
| original_folder | No | Folder of original email (optional, if fetching original) | |
| original_message_id | No | Message ID of email to forward (optional, if fetching original) | |
| body_text | No | Additional comment for forward | |
| body_html | No | Additional HTML comment for forward |
Implementation Reference
- The send_forward function implements the logic for forwarding an email, including constructing the forward email body with original message details and sending it via SMTP.
def send_forward( client, to: list[str], subject: str | None, original_message: Message | None = None, original_email_data: dict[str, Any] | None = None, body_text: str | None = None, body_html: str | None = None, from_addr: str | None = None, ) -> SendResult: """ 转发邮件 Args: client: SMTP 客户端对象 to: 转发目标收件人列表 subject: 主题 (如果为 None 会自动添加 Fwd:) original_message: 原邮件消息对象 (Message 类型) original_email_data: 原邮件数据 (dict 类型,从 IMAPClient.get_email 返回) body_text: 附言 (纯文本) body_html: 附言 (HTML) from_addr: 发件人地址 Returns: SendResult: 发送结果 """ # 验证参数 if not to: return SendResult(success=False, error="收件人列表不能为空") # 验证邮箱地址 for addr in to: if not validate_email_address(addr): return SendResult(success=False, error=f"无效的收件人地址: {addr}") try: # 获取发件人地址 if not from_addr: if hasattr(client, "config") and hasattr(client.config, "user"): from_addr = client.config.user else: return SendResult(success=False, error="缺少发件人地址") # 处理 original_email_data (dict 格式) if original_email_data and isinstance(original_email_data, dict): original_subject = original_email_data.get("subject", "") original_from = original_email_data.get("from", "N/A") original_to = original_email_data.get("to", "N/A") original_date = original_email_data.get("date", "N/A") original_body = original_email_data.get("body_text", "") or original_email_data.get( "body", "" ) elif original_message: # 处理 Message 对象 original_subject = original_message.get("Subject", "") original_from = original_message.get("From", "N/A") original_to = original_message.get("To", "N/A") original_date = original_message.get("Date", "N/A") # 获取邮件内容 original_body = "" if hasattr(original_message, "walk"): for part in original_message.walk(): if part.get_content_type() == "text/plain": try: original_body = part.get_payload(decode=True).decode("utf-8") except Exception: pass break else: # 没有原邮件数据 original_subject = "" original_from = "N/A" original_to = "N/A" original_date = "N/A" original_body = "" if subject is None: if original_subject and not original_subject.startswith("Fwd:"): subject = f"Fwd: {original_subject}" elif original_subject: subject = original_subject else: subject = "Fwd: (no subject)" # 构建转发邮件正文 forward_text = "" if body_text: forward_text = body_text + "\n\n" # 添加原邮件信息 forward_text += "---------- 转发邮件 ----------\n" forward_text += f"From: {original_from}\n" forward_text += f"To: {original_to}\n" forward_text += f"Subject: {original_subject}\n" forward_text += f"Date: {original_date}\n" forward_text += "\n" # 添加原邮件内容 if original_body: forward_text += original_body # 构建邮件 message = build_email_message( sender=from_addr, to=to, subject=subject, body_text=forward_text, body_html=body_html, ) # 生成 Message-ID message_id = make_msgid() message["Message-ID"] = message_id # 发送邮件 smtp = _get_smtp_client(client) smtp.send_message(message, from_addr=from_addr, to_addrs=to) return SendResult( success=True, message_id=message_id, ) except smtplib.SMTPException as e: return SendResult(success=False, error=f"SMTP 错误: {str(e)}") except Exception as e: return SendResult(success=False, error=f"转发失败: {str(e)}")