Angular + express + nodemailer не работает - PullRequest
0 голосов
/ 27 декабря 2018

Дело в том, что их сочетание действительно работает для меня, когда я делаю это в отдельном проекте, простом без других компонентов, только app.component.Но когда дело доходит до включения его в проект веб-сайта, над которым я работаю, он просто не складывается.

В основном, что привлекает мое внимание, так это то, что когда я использую параметр в моем контакте.component.ts, он компилируется, но весь раздел просто как бы вылетает, и веб-сайт перестает работать как следует, чего не происходит в моем другом проекте, но я не могу просто удалить его, потому что это то, что связывает все вместе.Мне также интересно, не ошибаюсь ли я с маршрутами.

Contacto.component.ts:

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators, FormArray } from '@angular/forms';

import { MessageService } from '../../services/message.service';

import * as _swal from 'sweetalert';
import { SweetAlert } from 'sweetalert/typings/core';
const swal: SweetAlert = _swal as any;

@Component({
  selector: 'app-contacto',
  templateUrl: './contacto.component.html',
  styleUrls: ['./contacto.component.css']
})

export class ContactoComponent{


  constructor(public _MessageService: MessageService) {



  }

  contactForm(form) {
    this._MessageService.sendMessage(form).subscribe(() => {
      swal("Formulario de contacto", "Mensaje enviado correctamente", 'success');
    });

  } 
}

это служба message.service:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class MessageService {

  constructor(private _http: HttpClient) { }

  sendMessage(body) {
    return this._http.post('http://localhost:3000/formulario', body); //para nodemailer. http client angular.
  }

}

это бит экспресса:

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const configMensaje = require('./configMensaje');

const app = express();
app.use(bodyParser.json());
app.use(cors())

app.post('/formulario', (req, res) => {
  configMensaje(req.body); //recibe los datos del form
  res.status(200).send();
})

app.listen(3000, () => {
  console.log('Servidor corriendo')
});

и это бит нодмаилера:

const nodemailer = require('nodemailer');


module.exports = (formulario) => {


      console.log('Credentials obtained, sending message...');

      // Create a SMTP transporter object

        const transporter = nodemailer.createTransport({
          host: 'smtp.gmail.com',
          port: 465,
          auth: {
              user: 'sofiaespada20@gmail.com',
              pass: 'Valentino10'
          }
      });

      // Message object
      const message = {
        from: `"Sofia" <sofiaespada20@gmail.com>`, 
        to: `"${formulario.nombre}" <${formulario.email}>`, 
        subject: formulario.asunto,
        html: `
        <strong>Nombre:</strong> ${formulario.nombre} <br/>
        <strong>Nombre:</strong> ${formulario.apellido} <br/>
        <strong>E-mail:</strong> ${formulario.email}  <br/>
        <strong>Mensaje:</strong> ${formulario.mensaje}
        `
      };

      transporter.sendMail(message, (err, info) => {
          if (err) {
              console.log('Error occurred. ' + err.message);
              return process.exit(1);
          }

          console.log('Message sent: %s', info.messageId);
          console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
      });
}  

1 Ответ

0 голосов
/ 27 декабря 2018

Это очень распространенная особенность в nodejs.Рабочее демо можно найти по ссылке ниже:

https://www.jsonworld.com/demo/detail/17/nodejs/Send-email-using-angularjs-and-nodejs-nodemailer-module

...