javascript - 如何使用 Nodemailer 从表单发送电子邮件

标签 javascript node.js forms email nodemailer

让我们先说我是 node 和 javascript 的初学者。我有一个使用 HTML、CSS 和 ASP.NET 构建的网站。我的网站上有一个电子邮件表单设置,我想将其从 ASP.NET 转换为 Node.js 只是为了学习体验。我遵循了几个不同的教程来尝试让这篇文章发挥作用。我一直做空!

我已经成功地让我的 html 电子邮件表单接受数据并且 Node 接收了它。然而,尝试获取 Node 并使用 nodemailer 以电子邮件的形式发送它,并不是那么多。我注意到有几个教程使用了“路由”,我想避免使用这个选项,因为它让我难以理解。如果有人可以解释如何做到这一点,或者为什么不这样做,或者为什么不能这样做?我将不胜感激。这是我到目前为止的代码:

Javascript/Node :

var nodemailer = require('nodemailer');
var bodyParser = require('body-parser');
var express = require('express');
var app = express();

app.use(bodyParser.urlencoded({
    extended: true
}));

app.post('/contact', function(req, res) {
    var mailOpts, smtpConfig;
    //Setup Nodemailer transport, I chose gmail. Create an application-specific             password to avoid problems.
    smtpConfig = nodemailer.createTransport('SMTP', {
        service: 'Gmail',
        auth: {
            user: "<myUser>",
            pass: "<myPassword>"
        }
    });
    //Mail options
    mailOpts = {
        from: req.query.name + ' &lt;' + req.query.email + '&gt;',
        //grab form    data from the request body object
        to: '<other user>',
        subject: 'Website contact form',
        text: req.query.message
    };
    smtpConfig.sendMail(mailOpts, function(error, response) {
        //Email not sent
        if (error) {
            res.end("Email send failed");
            //res.render('contact', { title: 'Raging Flame Laboratory - Contact',   msg: 'Error occured, message not sent.', err: true, page: 'contact' })
            //console.log("error");
        }//Yay!! Email sent
        else {
            res.end("Email send successfully");
            //res.render('contact', { title: 'Raging Flame Laboratory - Contact',  msg: 'Message sent! Thank you.', err: false, page: 'contact' })
            //console.log("success");
        }
    });
});

app.listen(8081, function() {
    console.log('Server running at http://127.0.0.1:8081/');
});

HTML:

<form action="http://127.0.0.1:8087/contact" method="post">
    <b>send us a quote</b>
    </br>
    <input type="text" name="name" id="name" value="Name">
    </br>
    <!--input type="text" name="bname" id="bname" value="Business Name"></br>-->
    <input type="text" name="email" id="email" value="Email Address">
    </br>
    <textarea name="message" id="message" cols="30" rows="10">Enter detailed information here</textarea>
    </br>
    <input type="submit" name="Submit" id="Submit" value="send message">
</form>

最佳答案

您的请求有误。那里应该由 req.body 而不是 req.query

关于javascript - 如何使用 Nodemailer 从表单发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754160/

相关文章:

mongodb - 在 Node.js 中执行 MongoDB 查询

node.js - 将 multer 与 inmemory 选项一起使用并流式传输到 mongodb gridfs

javascript - 添加/删除表单中的输入

javascript - 尽管更改了数据库规则,但将文件上传到 Firebase 存储仍会返回 403 错误

javascript - 如何执行条件SQL查询,将结果打包为JSON,并发回客户端?

javascript - 提交正确答案的按钮?

python - Django ModelForm 可以显示存储值的自定义表示吗?

javascript - 将输入文件值设置为第二个输入文件

javascript - 从 CSS 切换按钮触发 Jquery 事件

javascript - ngRoute 与动画滚动冲突