You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nodemailer发送邮件无正文内容问题求助

问题描述

使用Nodemailer、Angular和Firebase(Firestore存储邮件数据,Functions触发发送)搭建联系表单及邮件发送功能后,出现以下情况:

  • 前端用户提交表单后,表单值正常填充,返回成功提示;
  • Firestore模拟器中邮件数据字段完整;
  • 邮件能成功送达收件箱,但仅包含发件人、收件人及主题,正文显示“此邮件无内容”。

需要在邮件正文中展示用户的firstName、lastName、phone、邮箱地址及消息内容,怀疑mailOptions配置有误,不确定是否需添加HTML标签、编码处理等。

相关代码
import * as functions from "firebase-functions";

const admin = require("firebase-admin");
const nodemailer = require("nodemailer");
admin.initializeApp();

require('dotenv').config();

exports.sendMail = functions.firestore.document("emails/{emailId}")
    .onCreate((snap: any, context: any) => {
        const email = snap.data();
        functions.logger.log("Email Information: ", email);
        const mailTransport = nodemailer.createTransport({
            host: "smtp.gmail.com",
            port: 465, 
            secure: true, 
            service: "gmail",
            auth: {
                user: "realEmailAddress@gmail.com",
                pass: "realPassword",
            },
    });

    const mailOptions = {
        from: email.email,
        to: "dave.smith@company.co.uk",
        firstName: email.firstName,
        lastName: email.lastName,
        phone: email.phone,
        subject: email.subject,
        message: email.message,
    };

    return mailTransport.sendMail(mailOptions).then(() => {
        return console.log("Email sent");
    }).catch((error: any) => {
        return console.log("Error sending email", error);
    });
});
Firebase日志
12:37:56
I
function[us-central1-sendMail]
{
  "firstName": "Homer ",
  "lastName": "Simpson",
  "seqNo": 1,
  "phone": "07788 44 55 66",
  "subject": "My subject is - Hi this is Homer ",
  "message": "Email Information: ",
  "email": "homer@simpson.com",
  "severity": "INFO"
}
Firestore数据库数据

Firestore邮件数据

解决方案

问题出在mailOptions的配置上:Nodemailer并不识别你自定义的firstName、lastName、phone、message这些字段,邮件正文需要通过text(纯文本格式)或html(HTML格式)字段来定义。

修改mailOptions部分,根据需求选择纯文本或HTML格式:

纯文本格式示例

const mailOptions = {
    from: email.email,
    to: "dave.smith@company.co.uk",
    subject: email.subject,
    text: `
发件人姓名:${email.firstName} ${email.lastName}
联系电话:${email.phone}
邮箱地址:${email.email}
消息内容:${email.message}
    `
};

HTML格式示例(更美观)

const mailOptions = {
    from: email.email,
    to: "dave.smith@company.co.uk",
    subject: email.subject,
    html: `
<h3>新的联系表单消息</h3>
<p><strong>姓名:</strong>${email.firstName} ${email.lastName}</p>
<p><strong>电话:</strong>${email.phone}</p>
<p><strong>邮箱:</strong>${email.email}</p>
<p><strong>内容:</strong>${email.message}</p>
    `
};

修改后重新部署Firebase Functions,邮件正文就能正确展示所有用户提交的信息了。

内容的提问来源于stack exchange,提问作者Robgit28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:13