简体   繁体   English

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

[英]How to send email from form using Nodemailer

Let's start off by saying I am a beginner at node and javascript.让我们先说我是 node 和 javascript 的初学者。 I have a website that I built using HTML, CSS, and ASP.NET.我有一个使用 HTML、CSS 和 ASP.NET 构建的网站。 There is an email form setup on my website that i wanted to convert from ASP.NET to Node.js simply for the learning experience.我的网站上有一个电子邮件表单设置,我想将其从 ASP.NET 转换为 Node.js 只是为了学习体验。 I have followed several different tutorials to attempting to get this piece to work.我遵循了几个不同的教程来尝试让这篇文章发挥作用。 I keep coming up short!我一直做空!

I have successfully made my html email form accept data and the node picks it up.我已经成功地使我的 html 电子邮件表单接受数据并且节点接收了它。 However attempting to grab the node and send it in the form of an email using nodemailer, not so much.然而,尝试获取节点并使用 nodemailer 以电子邮件的形式发送它,并不是那么多。 I notice several tutorials use "routes" I would like to avoid this option because it simply goes over my head.我注意到有几个教程使用了“路由”,我想避免使用这个选项,因为它让我难以理解。 If someone could explain how to do that or why not to do that or how it cant be done?如果有人可以解释如何做到这一点,或者为什么不这样做,或者为什么不能这样做? I would be appreciative.我将不胜感激。 Here's my code that i have so far:这是我到目前为止的代码:

Javascript/Node: 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: 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>

You have a mistake on your requests.你的要求有误。 There shoud by req.body instead of req.query应该由 req.body 而不是 req.query

try adding尝试添加

app.use(bodyParser.json());

after

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

Mike麦克风

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM