Отправка почты с помощью nodemailer в NodeJS с интерфейсом Angular5 - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу отправлять электронную почту с моего сервера nodejs всякий раз, когда я регистрирую пользователя.Я использую Angular5 в качестве внешнего интерфейса.Он не возвращает никакой ошибки, но не работает.Как будто моя функция вообще не вызывается.Вот что я попробовал (электронная почта в данном примере не реальная):

server.js

app.post('/sendMails', function(req,res) {

    console.log("WENT INTO SEND MAILS!!!")


    let transporter = nodemailer.createTransport({
        service: 'gmail',
        secure: false,
        port: 25,
        auth: {
            user: 'someemail@gmail.com',
            pass: process.env.MAIL_PASSWORD
        },

        tls: {
            rejectUnauthorized: false
        },

    });

    let HelperOptions = {

        from: '"Babababa" <someemail@gmail.com>',
        to: 'someemail@gmail.com',
        subject: 'Hello world',
        text: 'hey dude'
    };

    transporter.sendMail(HelperOptions, (error, response) => {
        if(error) {
           return console.log(error);
           res.json({error: "API Error"});
        }

        else{
            console.log("The message is sent: " + response.message);
            res.json({response: "sent"})
        }




    })


    });

от Angular

UserService.ts (соответствующие части)

constructor(private http: HttpClient) { }

      sendMail(user: User){
    console.log("sendMail()  was called.")
    return this.http.post("http://localhost:3000/sendMails", user.email);
  }

Это вызывается в моем компоненте регистрации при регистрации

registration.component.ts

     public signUp(){

    //marks all fields as touched.
    this.fs.markFormGroupTouched(this.registerForm);


    if(this.registerForm.valid) {

      let user: User = this.registerForm.value;
      console.log(user)

      this.userService.createUser(user);
      this.userService.sendMail(user); //<--- only this is relevant for this case.

    }
    else {
      //shows the error messages, for the not valid input fields.
      this.formErrors = this.fs.validateForm(this.registerForm,
      this.formErrors, false)
    }



  }

Когда я запускаю этот код, ошибок нет.В окне консоли инспектора / на стороне клиента я вижу сообщение "sendMail () был вызван." , что означает, что он определенно вызывает мой сервис.Тем не менее, я не получаю ни почты, ни каких-либо ошибок

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы также должны иметь операторы return в вызове функции sendMail.В блоке ошибок res.send является недоступным кодом.Код редактирования ниже:

app.post('/sendMails', function(req,res) {

    console.log("WENT INTO SEND MAILS!!!")


    let transporter = nodemailer.createTransport({
        service: 'gmail',
        secure: false,
        port: 25,
        auth: {
            user: 'someemail@gmail.com',
            pass: process.env.MAIL_PASSWORD
        },

        tls: {
            rejectUnauthorized: false
        },

    });

    let HelperOptions = {

        from: '"Babababa" <someemail@gmail.com>',
        to: 'someemail@gmail.com',
        subject: 'Hello world',
        text: 'hey dude'
    };

    transporter.sendMail(HelperOptions, (error, response) => {
        if(error) {
            console.log(error);
           return res.json({error: "API Error"}); // return should be here instead of at console.log
        }

        else{
            console.log("The message is sent: " + response.message);
            return res.json({response: "sent"})
        }




    })


    });
0 голосов
/ 23 ноября 2018

http.post() внутри sendMail() возвращает наблюдаемое.Вы должны подписаться на эту наблюдаемую , иначе она будет не выполнена.

Так что в registration.component.ts вам нужно что-то вроде:

this.userService.sendMail(user).subscribe(
  response => {
    console.log(response);
  }
);
...