【问题标题】:Uploading a image and sending it using nodemailer上传图片并使用 nodemailer 发送
【发布时间】: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


【解决方案1】:

它有两个部分:

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

  2. https://community.nodemailer.com/using-embedded-images/ 您需要嵌入图像。 即在您的消息正文和 img 标记中,将每个图像路径替换为 unique_id,并将其放在如下内容:

对于您的 html/body 中存在的每个图像,您需要提供附件数组,其中包含该 unique_id 到确切图像的映射。详情见以上网址。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-08-12
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2011-01-04
    • 2017-12-06
    • 2017-04-18
    • 2021-08-23
    相关资源
    最近更新 更多