使用NodeJS(Nodemailer)和Angular 2验证电子邮件

时间:2017-03-09 03:34:33

标签: node.js email angular

  • 大家好,我想在Angular 2中创建一项服务,当用户输入他们的电子邮件并点击提交按钮时,它会向他们的电子邮件发送一个活动链接。
  • 我在NodeJS中使用Nodemailer来创建API发送电子邮件。现在,我如何使用Angular 2来调用此API。我在论坛上阅读了关于这个问题的文章但是我无法解决这个问题。

文件EmailAPI.js:

var nodemailer = require('nodemailer');
var router = express.Router();

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'abc@gmail.com',
        pass: '111111'
    }
});

let mailOptions = {
    from: 'abc@gmail.com',
    to: 'xzy@gmail.com',
    subject: 'Test Mailer',
    text: 'I am testing Nodemailer to send email.',
};

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

File Angular 2:email.services.ts

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';


@Injectable()
export class EmailService {

  constructor(private http: Http ) { }

  public VerifyEmail() {

  }
}

1 个答案:

答案 0 :(得分:1)

您需要在服务中构建一个http呼叫,该呼叫将指向您的Node应用。

我最近在gist - Angular 2 call Node Service

上为此写了GitHub

请原谅Gist我的雷达上的格式来设置它的样式。

<强>更新

您需要在节点项目中做的第一件事就是设置route我注意到您已声明var router = express.Router();,但您实际上并没有使用它。

因此,根据我指定的gist,您可以执行以下操作:

var express = require('express')

var app = express();

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'abc@gmail.com',
        pass: '111111'
    }
});

let mailOptions = {
    from: 'abc@gmail.com',
    to: 'xzy@gmail.com',
    subject: 'Test Mailer',
    text: 'I am testing Nodemailer to send email.',
};

app.options('/sendmail', function (req, res) {
  res.sendStatus(200);
});


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

    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200'); // Change this to your Angular 2 port number
    res.setHeader('Access-Control-Request-Method', '*');
    res.setHeader('Access-Control-Allow-Methods', 'POST');
    res.setHeader('Access-Control-Allow-Headers', '*');

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

})

我假设您的node项目是此Angular 2项目的单独解决方案。然后,您需要导航到node项目的根目录并运行node EmailAPI.js,这将在您的Angular 2应用程序的单独端口下运行。 注意运行node EmailAPI.js后,将显示正在运行的端口。

现在,在您的Angular 2应用程序中,您构建了Http来电:

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';


@Injectable()
export class EmailService {

  constructor(private http: Http ) { }

  public VerifyEmail() {
       return this.http.post(`http://localhost:3000/sendmail`, null, null).map(res => res.json());
  }
}

注意您将在通话中看到http://localhost:3000,将其更改为运行node EmailAPI.js后显示的端口名称。

我认为可能适合的其他信息,我强烈建议您查看Postman - Testing your API's这将有助于调试您可能遇到的任何错误 - 如果有的话。