【发布时间】:2018-03-16 18:24:50
【问题描述】:
我正在尝试制作一个可以发送图像的表单。 我希望这些图像使用 nodemailer 在邮件中发送。 我已经想出了如何通过使用 express 和 body 解析器从我的表单中获取信息,然后将其放入我的邮件中。 这当然不适用于我的图片,要么告诉我我的 app.js 有问题,要么它确实发送了但在我收到的邮件中给出了未定义的图片应该去哪里。
我尝试寻找某种解决方案或答案,但找不到。 因此,如果有人可以向我发送一个链接来回答我的问题,或者可以在这里向我提供帮助和解释,我将不胜感激。
谢谢!
我的表格:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="public/css/style.css">
</head>
<body>
<div class="contact">
<ul>
<h2 class="centerFormName">Form</h2>
{{msg}}
<form method="POST" action="send" enctype="multipart/form-data">
<label>Placeholder Image:</label>
<input type="file" name="file" id="file"/>
</p>
<p class="full">
<label>Message:</label>
<textarea class="inputcss" name="message" rows="5"></textarea>
</p>
<p class="full">
<button type="submit">Submit</button>
</p>
</form>
</ul>
</div>
</body>
</html>
我的 app.js
const express = require('express');
const fileUpload = require('express-fileupload');
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) => {
//output
const output = `
<p>You have a new Mail</p>
<h3>Mail</h3>
<ul>
<li>Voornaam: ${req.body.name}</li>
<li>Achternaam: ${req.body.achternaam}</li>
<li>Email: ${req.body.email}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
//Trnasporter
const transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
type: 'OAuth2',
user: 'xander@mail.com',
clientId: '',
clientSecret: '',
refreshToken: '',
accessToken: '',
},
});
//Mail options
let mailOptions = {
from: 'Xander <Xander@mail.com>', // sender address
to: req.body.email, // list of receivers
subject: 'Hi', // Subject line
html: output // html body
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
res.render('contact', {msg:'Email has been sent'});
});
});
app.listen(3000, () => console.log('Server started...'));
请注意,我在此处将表单缩短了一些。
【问题讨论】:
-
当您上传图片时,您正在发送多部分/表单数据请求。你需要 multer 来处理它。在此处查看接受的答案以了解如何使用它。 stackoverflow.com/questions/49029893/…
-
@GiannisMp 我会检查一下!谢谢
标签: html node.js express nodemailer body-parser