Skip to main content
Glama
shuakami

Mail MCP Tool

by shuakami

sendHtmlMail

Send HTML-formatted emails with attachments using the Mail MCP server. Specify recipients, subject, HTML content, and optional CC/BCC fields to deliver rich email communications.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYes
ccNo
bccNo
subjectYes
htmlYes
attachmentsNo

Implementation Reference

  • Registration of the 'sendHtmlMail' MCP tool. Includes Zod input schema and inline async handler that constructs MailInfo object and delegates to mailService.sendMail() for actual sending.
    this.server.tool(
      "sendHtmlMail",
      {
        to: z.string(),
        cc: z.string().optional(),
        bcc: z.string().optional(),
        subject: z.string(),
        html: z.string(),
        attachments: z.array(
          z.object({
            filename: z.string(),
            content: z.union([z.string(), z.instanceof(Buffer)]),
            contentType: z.string().optional()
          })
        ).optional()
      },
      async (params) => {
        try {
          const mailInfo: MailInfo = {
            to: params.to,
            subject: params.subject,
            html: params.html
          };
          
          if (params.cc) {
            mailInfo.cc = params.cc;
          }
          
          if (params.bcc) {
            mailInfo.bcc = params.bcc;
          }
          
          if (params.attachments) {
            mailInfo.attachments = params.attachments;
          }
          
          const result = await this.mailService.sendMail(mailInfo);
          
          if (result.success) {
            return {
              content: [
                { type: "text", text: `HTML邮件发送成功,消息ID: ${result.messageId}\n\n提示:如果需要等待对方回复,可以使用 waitForReply 工具。` }
              ]
            };
          } else {
            return {
              content: [
                { type: "text", text: `HTML邮件发送失败: ${result.error}` }
              ]
            };
          }
        } catch (error) {
          return {
            content: [
              { type: "text", text: `发送HTML邮件时发生错误: ${error instanceof Error ? error.message : String(error)}` }
            ]
          };
        }
      }
    );
  • The execution handler function for sendHtmlMail tool. Prepares email parameters, calls mailService.sendMail, and formats success/error text responses.
    async (params) => {
      try {
        const mailInfo: MailInfo = {
          to: params.to,
          subject: params.subject,
          html: params.html
        };
        
        if (params.cc) {
          mailInfo.cc = params.cc;
        }
        
        if (params.bcc) {
          mailInfo.bcc = params.bcc;
        }
        
        if (params.attachments) {
          mailInfo.attachments = params.attachments;
        }
        
        const result = await this.mailService.sendMail(mailInfo);
        
        if (result.success) {
          return {
            content: [
              { type: "text", text: `HTML邮件发送成功,消息ID: ${result.messageId}\n\n提示:如果需要等待对方回复,可以使用 waitForReply 工具。` }
            ]
          };
        } else {
          return {
            content: [
              { type: "text", text: `HTML邮件发送失败: ${result.error}` }
            ]
          };
        }
      } catch (error) {
        return {
          content: [
            { type: "text", text: `发送HTML邮件时发生错误: ${error instanceof Error ? error.message : String(error)}` }
          ]
        };
      }
    }
  • MailInfo TypeScript interface defining the structure for email parameters, used by sendHtmlMail handler and sendMail helper.
    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;
      }>;
    }
  • Core helper method sendMail in MailService class. Uses nodemailer Transporter to send the actual email with HTML support, returns success/messageId or error.
     * 发送邮件
     */
    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) };
      }
    }

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