如何使用Nodemailer

时间:2016-01-12 21:32:15

标签: javascript node.js forms email nodemailer

让我们开始说我是节点和javascript的初学者。我有一个使用HTML,CSS和ASP.NET构建的网站。我的网站上有一个电子邮件表单设置,我想从ASP.NET转换到Node.js只是为了学习体验。我已经按照几个不同的教程试图让这个片段起作用。我一直在做空!

我已经成功地使我的html电子邮件表单接受数据并且节点选择了它。然而,试图抓住节点并使用nodemailer以电子邮件的形式发送它,而不是那么多。我注意到有几个教程使用" routes"我想避免这个选项,因为它只是让我头脑发热。如果有人可以解释如何做到这一点或为什么不这样做或如何做到这一点?我很感激。这是我到目前为止的代码:

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>

3 个答案:

答案 0 :(得分:1)

您的请求有误。应该由req.body代替req.query

答案 1 :(得分:0)

尝试添加

app.use(bodyParser.json());

之后

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

麦克

答案 2 :(得分:0)

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
});