Skip to main content
Glama

sendMail

Send emails with recipients, subject, text or HTML content, and attachments through the Mail MCP Tool server for AI-assisted email operations.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYes
ccNo
bccNo
subjectYes
textNo
htmlNo
useHtmlNo
attachmentsNo

Implementation Reference

  • Core implementation of sendMail in MailService class using nodemailer Transporter to send email with SMTP.
    async sendMail(mailInfo: MailInfo): Promise<{ success: boolean; messageId?: string; error?: string }> { try { const mailOptions = { from: { name: this.config.defaults.fromName, address: this.config.defaults.fromEmail, }, to: mailInfo.to, cc: mailInfo.cc, bcc: mailInfo.bcc, subject: mailInfo.subject, text: mailInfo.text, html: mailInfo.html, attachments: mailInfo.attachments, }; const info = await this.smtpTransporter.sendMail(mailOptions); return { success: true, messageId: info.messageId }; } catch (error) { console.error('发送邮件错误:', error); return { success: false, error: error instanceof Error ? error.message : String(error) }; } }
  • MCP tool registration for 'sendMail' using McpServer.tool(), including Zod input schema and async execution handler that prepares MailInfo and calls MailService.sendMail.
    this.server.tool( "sendMail", { to: z.array(z.string()), cc: z.string().or(z.array(z.string())).optional(), bcc: z.string().or(z.array(z.string())).optional(), subject: z.string(), text: z.string().optional(), html: z.string().optional(), useHtml: z.boolean().default(false), attachments: z.array( z.object({ filename: z.string(), content: z.union([z.string(), z.instanceof(Buffer)]), contentType: z.string().optional() }) ).optional() }, async (params) => { try { // 检查内容是否提供 if (!params.text && !params.html) { return { content: [ { type: "text", text: `邮件内容不能为空,请提供text或html参数。` } ] }; } // 如果指定使用HTML但没有提供HTML内容,自动转换 if (params.useHtml && !params.html && params.text) { // 简单转换文本为HTML params.html = params.text .split('\n') .map(line => `<p>${line}</p>`) .join(''); } // 处理收件人信息,确保to字段一定存在 const to = params.to; const mailInfo: MailInfo = { to: to, subject: params.subject, attachments: params.attachments }; // 处理抄送和密送信息 if (params.cc) { mailInfo.cc = typeof params.cc === 'string' ? params.cc : params.cc; } if (params.bcc) { mailInfo.bcc = typeof params.bcc === 'string' ? params.bcc : params.bcc; } // 设置邮件内容 if (params.html || (params.useHtml && params.text)) { mailInfo.html = params.html || params.text?.split('\n').map(line => `<p>${line}</p>`).join(''); } else { mailInfo.text = params.text; } const result = await this.mailService.sendMail(mailInfo); if (result.success) { return { content: [ { type: "text", text: `邮件发送成功,消息ID: ${result.messageId}\n\n提示:如果需要等待对方回复,可以使用 waitForReply 工具。` } ] }; } else { return { content: [ { type: "text", text: `邮件发送失败: ${result.error}` } ] }; } } catch (error) { return { content: [ { type: "text", text: `发送邮件时发生错误: ${error instanceof Error ? error.message : String(error)}` } ] }; } } );
  • Zod schema for sendMail tool input parameters, defining structure for recipients, subject, content, and attachments.
    { to: z.array(z.string()), cc: z.string().or(z.array(z.string())).optional(), bcc: z.string().or(z.array(z.string())).optional(), subject: z.string(), text: z.string().optional(), html: z.string().optional(), useHtml: z.boolean().default(false), attachments: z.array( z.object({ filename: z.string(), content: z.union([z.string(), z.instanceof(Buffer)]), contentType: z.string().optional() }) ).optional()
  • TypeScript interface MailInfo defining the input structure passed to the sendMail method.
    export interface MailInfo { to: string | string[]; cc?: string | string[]; bcc?: string | string[]; subject: string; text?: string; html?: string; attachments?: Array<{ filename: string; content: string | Buffer; contentType?: string; }>; }

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/shuakami/mcp-mail'

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