通过与我联系部分发送的node.js电子邮件

时间:2019-03-11 02:23:09

标签: node.js email nodemailer

作为练习,我只是创建了一个静态投资组合引导网站,该网站底部有一个“与我联系”部分,您可以在其中输入您的姓名,电话号码,电子邮件和一些文本。这个网站最初是作为一个静态网站创建的,但是在我观看了几个有关如何使用node.js发送电子邮件的youtube视频之后,我在一个单独的项目中对其进行了测试,并且代码可以正常工作。因此,我决定将此功能添加到此静态网站中,但是我做到了,但是我学到的代码不再起作用。我对node.js还是很陌生,现在我认为整个想法首先可能是错误的,因为我可能需要设置不同的文件夹结构/或环境,至少要从一开始就着手这项工作,而不仅仅是简单地在上面加上一些东西是正确的。 我提供了文件夹结构和app.js文件的图像。 app.js已放置在公用文件夹目录中(根据我的研究发现),并且还添加了指向html文件的链接,供html页面访问JavaScript文件。但是,一旦将app.js放置在公用文件夹中,当我运行node.js app.js时,我总是会出错。看来它不再起作用了。 此外,您在下面看到的代码来自youtube video,我遵循的是联系表单是它唯一呈现的内容,但是,就我而言,联系表单是html文件的一部分,我该如何呈现如果联系表单是html文件的一部分,则为表单。谁能帮我吗?

const express = require('express');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const path = require('path');
const nodemailer = require('nodemailer');

const app = express();

// View engine setup
app.engine('handlebars', exphbs());
app.set('view engine', 'handlebars');

// Static folder
app.use('/public', express.static(path.join(__dirname, 'public')));

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())


app.get('/', (req, res) => {
 res.render('contact');
});

app.post('/send', (req, res) => {
    const output = `
    <p>You have a new contact request</p>
    <h3>Contact Details</h3>
    <ul>  
      <li>Name: ${req.body.name}</li>
      <li>Email: ${req.body.email}</li>
      <li>Phone: ${req.body.phone}</li>
    </ul>
    <h3>Message</h3>
    <p>${req.body.message}</p>
  `;

    // create reusable transporter object using the default SMTP transport
    let transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 587,
        secure: false, // true for 465, false for other ports
        auth: {
            user: 'jasonking4ever@gmail.com', // generated ethereal user
            pass: 'senyang123'  // generated ethereal password
        },
        tls: {
            rejectUnauthorized: false
        }
    });

    // setup email data with unicode symbols
    let mailOptions = {
        from: '"Contact Form" <jasonking4ever@gmail.com>', // sender address
        to: 'syan19@live.cn', // list of receivers
        subject: 'You have a new contact request', // Subject line
        text: 'Hello world?', // plain text body
        html: output // html body
    };

    // send mail with defined transport object
    transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: %s', info.messageId);
        console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

        res.render('contact', { msg: 'Email has been sent' });
    });
})

app.listen('3000', () => console.log('the server is starting...'))

enter image description here

1 个答案:

答案 0 :(得分:1)

嘿,我的服务器文件在根目录中(我的意思是在您的文件夹根目录中)是我必须看到的app.js文件夹,而不是公共文件夹,公共文件夹用于提供公共文件(请说与UI相关的文件。)。因此,从此处删除app.js,并将其放在文件夹根目录中并运行node。希望有帮助。