Как отправить электронное письмо с вложенным письмом с помощью nodemialer? - PullRequest
0 голосов
/ 30 января 2019

Страница моего сайта о карьере. Пользователю необходимо отправить свой профиль, а затем профиль (doc или pdf) необходимо отправить в виде вложения в электронное письмо, нажав кнопку «Отправить».Технологии Я использую Angular6, NodeJs, Express и Nodemailer для отправки электронной почты.

Вот мой мир HTML-кода (careers.html),

  <form (ngSubmit)="sendData()" >
       <textarea [(ngModel)]="user.message"></textarea>
         <input type="file" (change)="userProfile($event)" >
          <small>Upload .docx or pdf file</small>
       <button >Submit</button>
   </form>

немного кода ts (careers.ts),

   user = {
      message: '',
      fileContent :''
    };

     userProfile(event: any) {        
          if (event.target.files && event.target.files[0]) {
              var reader = new FileReader();
              reader.onload = (event: any) => {
          this.user.fileContent = event.target.result;
              }
              reader.readAsDataURL(event.target.files[0]);
          }

     sendData() {   
          this.careersService.sendWithAttachment(this.user);
     }

здеськласс обслуживания (service.ts),

  sendWithAttachment(userData) {

    this.http.post("http://localhost:3000/uploadfile", userData
    )
      .subscribe(
        data => {
          console.log("Sent Request is successful ", data);
        },
        error => {
          console.log("Error", error);
        }
      );
  }

наконец, файл js (app.js)

var mailOptions = {
        from: '"User" <mail@gmail.com>', // sender address
        to: "mail@mail.com", // list of receivers
        subject: "Mail from Careers",
        text: text,
        html: html, // html body
        attachments: [  {  
            filename: 'profile.pdf',
            content: req.body.fileContent,
            contentType: 'application/pdf'
        }]
    };

    transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: ' + info.response);
    });

Теперь я могу получать электронную почту с вложением, но это приложение пустое или повреждено,Любая помощь очень ценится.

1 Ответ

0 голосов
/ 31 января 2019

Вам нужно загрузить файл на сервер, возможно, вы сможете сделать это, хотя multer , а затем вы можете передать путь к файлу сервера в функцию Nodemailer.

Вот некоторый кодфрагмент для справки:

var express = require('express')
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })

var app = express()

app.post('/uploadfile', upload.single('profile'), function (req, res) {
    var mailOptions = {
        ....
        attachments: [{
            filename: req.file.filename,
            path: req.file.path
        }]
    };
    ...
})

Примечание. Присоединение может быть выполнено различными способами в Nodemailer. См. документацию

.
...