上传图像并使用nodemailer发送

时间:2018-02-28 14:50:35

标签: html node.js express nodemailer body-parser

我正在尝试制作一个可以发送图像的表单。 我希望使用nodemailer在邮件中发送这些图像。 我已经弄清楚如何通过使用快速和身体解析器从我的表单中获取信息,然后将其放入我的邮件中。 这个当然不适用于我的图片,要么告诉我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...'));

注意我在这里缩短了表格。

1 个答案:

答案 0 :(得分:0)

它有两个部分:

  1. 您需要将用户上传的图片发送到您的后端。 使用multer和/或tempy。

  2. 请参阅https://community.nodemailer.com/using-embedded-images/ 你需要嵌入你的图像。 即在你的邮件正文和img标记中,用unique_id替换每个图像路径,并把它放在下面:

  3. 对于html / body中存在的每个图像,您需要提供附件数组,并将该unique_id映射到精确图像。有关详细信息,请参阅上面的URL。

    希望它有所帮助。