提问者:小点点

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


我最近开始开发一个简单的应用程序来发送电子邮件。我想在一个朋友的业务网站上使用这个。目标,然而,是有一个网站的用户发送一个电子邮件到一个指定的地址,以便企业所有者可以接收客户的工作。

考虑到当前我使用的依赖关系(只是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个答案

匿名用户

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

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

我高度怀疑任何电子邮件服务将允许直接发送电子邮件从客户端id到业务id,除非您有自己的SMTP服务器设置,安全策略最低。这将是一个巨大的安全威胁,通过允许服务器发送电子邮件假冒他人!