Cant send image attachments with email using nodemailer

Viewed 378

I'm using a nodemailer to send a mail. Now I want to that the user be able to send an attachment (image with the email. I have tried several ways but nothing worked for me. Even looking here but still hard to figure out how it works. So any help would be great.

So here is my contactPage form

<form onsubmit="return phonenumberValidation()" method="POST" action="send">
                <p>
                  <label>Naam</label>
                  <input type="text" name="name" required>
                </p>
                <p>
                  <label>Organisatie</label>
                  <input type="text" name="company">
                </p>
                <p>
                  <label>Email</label>
                  <input type="email" name="email" required >
                </p>
                <p>
                  <label>Telefoonnummer</label>
                  <input type="text" name="phone" id="phone" value="">
                  <span id="messages"></span>
                </p>
                <p class="full">
                  <label>Bericht</label>
                  <textarea name="message" rows="5" required></textarea>
                </p>
                <p class="full">
                  <input type="file" name="image" id="image" class="form-control">
                </p>
                <p class="full">
                  <input type="submit" value="Submit">
                </p>
            </form>

And here is my code

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>Company: ${req.body.company}</li>
        <li>Email: ${req.body.email}</li>
        <li>Phone: ${req.body.phone}</li>
        <li>Image: ${req.body.image}</li>
        </ul>
        <h3>Message</h3>
        <p>${req.body.message}</p>
    `;
    // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: 'host',
    port: 465,
    secure: true, // true for 465, false for other ports
    auth: {
      user: 'user', // generated ethereal user
      pass: 'password', // generated ethereal password
    },
    tls: {
        rejectUnauthorized: false
    }
  });

  // send mail with defined transport object
  
  let mailOptions = {
    from: '"Fred Foo " <email of sender>', // sender address
    to: 'email', // list of receivers
    subject: 'Test ✔', // Subject line
    text: 'Hello world?', // plain text body
    html: output, // html body
    image: req.body.image,
    attachtements: [
        
        {
            fileName:     req.body.title+".jpg",
            streamSource: fs.createReadStream(req.files.image.path)
        }
    ]
  };
  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('contactPage', {
      message: 'We hebben uw aanvraag ontvangen en we zullen u binnen twee werkdagen beantwoorden'
  });

Iam getting the following error as wel

TypeError: Cannot read property 'image' of undefined
    at app.post (C:\Users\w_ema\MTaarten\app.js:149:49)
    at Layer.handle [as handle_request] (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\w_ema\MTaarten\node_modules\express\lib\router\index.js:275:10)
    at SessionStrategy.strategy.pass (C:\Users\w_ema\MTaarten\node_modules\passport\lib\middleware\authenticate.js:343:9)
    at SessionStrategy.authenticate (C:\Users\w_ema\MTaarten\node_modules\passport\lib\strategies\session.js:75:10)

0 Answers
Related