2017-03-09 2 views
0
  • 모두 안녕하십니까, 사용자가 전자 메일을 입력하고 제출 단추를 클릭하면 전자 메일에 대한 활성 링크가 전송됩니다.
  • NodeJS에서 Nodemailer를 사용하여 API 전송 이메일을 만들었습니다. 자, Angular 2를 사용하여이 API를 호출하는 방법. 포럼에서이 문제에 대한 기사를 읽었지만 해결할 수 없었습니다.

파일 EmailAPI.js :NodeJS (Nodemailer) 및 각도 2를 사용하여 전자 메일 확인

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

let transporter = nodemailer.createTransport({ 
    service: 'gmail', 
    auth: { 
     user: '[email protected]', 
     pass: '111111' 
    } 
}); 

let mailOptions = { 
    from: '[email protected]', 
    to: '[email protected]', 
    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); 
}); 

파일 코너 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() { 

    } 
} 
+0

무엇이 문제입니까? 어떤 오류? – Smit

+0

이 API를 어떻게 사용할 수 있습니까? 2 번 각도에서 이메일을 보내십니까? – ryannguyen

+0

@ryannguyen 내 대답을 참조하십시오. –

답변

0

당신을 가리 킵니다 서비스 내에서 HTTP 호출을 구성해야합니다 귀하의 Node 신청서. 그 스타일을 내 레이더에 Angular 2 call Node Service

변명 그것은 년대 Gist에 서식 -

는 최근 GitHub에 이것에 대한 gist을 썼다.

업데이트

당신이 당신의 노드 프로젝트 내에서해야 할 첫 번째 것은 당신이 var router = express.Router();을 선언했지만 실제로 사용하지 않을 눈치 route을 설정한다.

var express = require('express') 

var app = express(); 

let transporter = nodemailer.createTransport({ 
    service: 'gmail', 
    auth: { 
     user: '[email protected]', 
     pass: '111111' 
    } 
}); 

let mailOptions = { 
    from: '[email protected]', 
    to: '[email protected]', 
    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 프로젝트에 별도의 솔루션입니다 :

가 그래서 gist 기반으로 난 당신이 이런 일을 할 수있는 지정했습니다. 그런 다음 node 프로젝트의 루트로 이동하여 node EmailAPI.js을 실행하면 Angular 2 응용 프로그램과 별도의 포트에서 실행됩니다. node EmailAPI.js을 실행하면 실행중인 포트가 표시됩니다. 당신은, 호출 내에서 http://localhost:3000를 참조하면 node EmailAPI.js을 실행 한 후에 표시되는 포트 이름을 변경할 수 있습니다

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()); 
    } 
} 

참고 :

는 이제 Angular 2 응용 프로그램 내에서 당신은 당신의 Http 전화를 구축합니다.

이 정보에 잘 부합되는 추가 정보가 있으면 Postman - Testing your API's을 살펴보면 오류가 발생할 경우이를 디버그하는 데 도움이됩니다.

+0

감사합니다. 좀 더 명확하게 설명 할 수 있습니까? 특히 위의 코드를 참조하십시오. – ryannguyen

+0

@ryannguyen 업데이트 된 답변을 참조하십시오. –

+0

답변 해 주셔서 감사합니다. Node 프로젝트에 연결된 Angular 2 프로젝트를 어떻게 알 수 있습니까? 나는 당신의 답을 따랐으나 Angular 2에서 이메일 보내기 버튼을 클릭하면 노드 프로젝트의 콘솔에 성공적으로 보내는 메시지가 표시되지 않습니다. – ryannguyen