让客户端使用前端 JS 和 nodeJS 发送电子邮件

时间:2020-12-18 19:14:36

标签: javascript html node.js json

我最近开始开发一个简单的应用来发送电子邮件。我想在朋友业务的网站中使用它。然而,目标是让网站用户向指定地址发送电子邮件,以便企业主可以接收客户的工作。

鉴于我正在使用的当前依赖项(它只是 nodemailer),我不太确定这是否可能。我目前可以通过应用程序接收测试电子邮件,但这些电子邮件仅来自我自己的电子邮件帐户(凭据保存在 .env 文件中)。但是,我可以在终端中看到我尝试发送的数据。是否有我遗漏的东西或需要其他服务才能完成我想做的事情?感谢您对如何进行的任何想法,谢谢!

require("dotenv").config();
const nodemailer = require("nodemailer");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
const path = require("path");

const PORT = 8080;

//data parsing
app.use(express.urlencoded({extended: false}));
app.use(bodyParser.json());

let transporter = nodemailer.createTransport({
    service: "gmail",
    auth:
    {
        user: process.env.EMAIL,
        pass: process.env.PASSWORD
    }
});

app.post("/email", (req, res) =>{
    //data to handle
    let mailOptions = {
        from: req.body.senderEmail,
        to: "test@gmail.com",
        subject: req.body.subject,
        text: req.body.text
    };
    //sending email
    transporter.sendMail(mailOptions, (err, data) =>{
        if(err){
            console.log("Error occured", err);
        }
        else
        {
            console.log("Data: ", req.body);
        }
    });
});
//display index.html
app.get("/", (req, res) =>{
    res.sendFile(path.join(__dirname, "views", "index.html"));
});
//Start server
app.listen(PORT, process.env.ID, () =>{
    console.log("Server is starting on PORT ", PORT);
});

带有少量 jquery 的 HTML 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>App</h1>
    <form action="/email" method="POST">
        <input type="text" id="subject" name="subject" placeholder="Subject" required><br>
        <input type="email" id="email" name="senderEmail" placeholder="Email" required><br>
        <textarea name="text" id="text" cols="30" rows="10" required></textarea><br>
        <input type="submit" value="Submit">
    </form>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $("form").on("submit", (e) =>
        {
            //stops default browser behaviour
            e.preventDefault();
            const email = $("#email").val().trim();
            const subject = $("#subject").val().trim();
            const text = $("#text").val().trim();

            const data = {email, subject, text};

            $.post("/email", data, () =>{ console.log("Server received our data");});
        });
    </script>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

网站用户可以通过两种方式发送电子邮件:

  1. 通过直接电子邮件发送。 HTML 格式的电子邮件地址前可以有一个 mailto:
  2. 像您一样发送表单请求,并在您的环境中设置一个代理电子邮件,然后将电子邮件发送给企业主。

我非常怀疑任何电子邮件服务都允许从客户 ID 直接向企业 ID 发送电子邮件,除非您有自己的 SMTP 服务器设置且安全策略最少。这将是一个巨大的安全威胁,允许服务器冒充他人发送电子邮件!