【问题标题】:How to send email from form using Nodemailer如何使用 Nodemailer 从表单发送电子邮件
【发布时间】:2016-04-17 16:30:24
【问题描述】:

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

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

Javascript/节点:

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>

【问题讨论】:

标签: javascript node.js forms email nodemailer


【解决方案1】:

尝试添加

app.use(bodyParser.json());

之后

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

迈克

【讨论】:

    【解决方案2】:
    var nodemailer = require('nodemailer');
    
    // Create a SMTP transport object
    var transport = nodemailer.createTransport("SMTP", {
        service: 'Hotmail',
        auth: {
            user: "username",
            pass: "password"
        }
      });
    
    console.log('SMTP Configured');
    
    // Message object
     var message = {
    
    // sender info
    from: from,
    
    // Comma separated list of recipients
    to: req.query.to ,
    
    // Subject of the message
    subject:req.query.subject //'Nodemailer is unicode friendly ✔', 
    
    // plaintext body
    text: req.query.text //'Hello to myself!',
    
    // HTML body
     /*  html:'<p><b>Hello</b> to myself <img src="cid:note@node"/></p>'+
         '<p>Here\'s a nyan cat for you as an embedded attachment:<br/></p>'*/
    };
    
    console.log('Sending Mail');
    transport.sendMail(message, function(error){
    if(error){
      console.log('Error occured');
      console.log(error.message);
      return;
    }
     console.log('Message sent successfully!');
    
     // if you don't want to use this transport object anymore,uncomment    
     //transport.close(); // close the connection pool
    });
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 2015-05-19
        • 1970-01-01
        • 2021-12-28
        • 2023-03-27
        • 2020-12-26
        相关资源
        最近更新 更多