Nodemailer 发送电子邮件但没有显示电子邮件正文/消息

问题描述 投票:0回答:1

我一直在一堆不同的教程、文档和此处跳来跳去,但找不到解决方案。而且我知道我错过了一小块拼图。

我已经使用 Nodemailer、Angular 和 Firebase 构建了一个联系表单和电子邮件发件人(商店 - 保存电子邮件数据和功能 - 触发发送电子邮件数据库)。

  • 现在,当用户在前端填写表单并提交时,我可以看到表单中填充了相关值,并且我从订阅中收到一条成功消息。
  • 电子邮件已发送,我可以在我的 Firestore DB 模拟器中看到它,其中填充了所有相关模型字段。
  • 还发送了电子邮件,我收到了我的收件箱,但只有 emailFrom、emailTo 和主题字段。我只是在电子邮件正文中有“此消息没有内容”。
  • 我想要名字、姓氏、电话、电子邮件(表单用户电子邮件地址)和文本字段中的消息正文。

我假设我的 mailOptions 配置不正确。不确定我是否需要添加 html pre 标签,是否需要对其进行编码/解码、json 等等

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: "[email protected]",
                pass: "realPassword",
            },
    });

    const mailOptions = {
        from: email.email,
        to: "[email protected]",
        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": "[email protected]",
  "severity": "INFO"
}

Firestore 数据库电子邮件

angular firebase google-cloud-functions nodemailer
1个回答
1
投票

查看 NodeMailer 电子邮件消息对象的可能字段:包括像

firstName
lastName
phone
这样的元素是行不通的。

您必须使用

text
html
元素,方法是将对应于所需正文内容的字符串传递给它们。例如:

使用文字:

const mailOptions = {
    from: email.email,
    to: "[email protected]",
    subject: email.subject,
    text: `firstName:  ${email.firstName} - lastName: ${email.lastName}` 
};

使用 html:

const mailOptions = {
    from: email.email,
    to: "[email protected]",
    subject: email.subject,
    html: `<b>Title</b><br/><br/>firstName:  ${email.firstName} <br/><br/> lastName: ${email.lastName}`
};
© www.soinside.com 2019 - 2024. All rights reserved.