2017-03-09 10 views
0
  • 皆さん、こんにちは皆さん、電子メールを入力して送信ボタンをクリックすると、電子メールへのアクティブなリンクが送信されます。
  • NodeJSでNodemailerを使用してAPI送信メールを作成しました。ここで、Angular 2を使ってこのAPIを呼び出す方法を説明します。フォーラムでこの問題に関する記事を読んだが、解決できなかった。

ファイルEmailAPI.js:NodeJS(Nodemailer)とAngular 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

​​
+0

問題が何ですか?任意のエラー? – Smit

+0

私はこのAPIをどのように使用して角2から電子メールを送りますか? – ryannguyen

+0

@ryannguyen私の答えを見てください。 –

答えて

0

あなたはを指しますあなたのサービス内のHTTP呼び出しを構築する必要がありますあなたのNodeアプリケーション。

私は最近、GitHubに、このためgistを書いた - それはそれのスタイルを私のレーダーにだGistにフォーマットすみませんAngular 2 call Node Service

更新

あなたのノードプロジェクト内で行う必要がありますまず最初は、私はあなたがvar router = express.Router();を宣言したが、あなたが実際にそれを使用していない気づいrouteに設定されています。

だから私はあなたがこのような何か行うことができ、指定gistオフに基づいて:

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プロジェクトとは別の解決策であると仮定しています。 nodeプロジェクトのルートに移動し、node EmailAPI.jsを実行する必要があります。これは、Angular 2アプリケーションとは別のポートで実行されます。 実行中のポートはnode EmailAPI.jsの後に表示されます。

今、あなたはあなたのHttpコール構築あなたのAngular 2アプリケーション内部:

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

NOTEあなたはnode EmailAPI.jsを実行した後に表示されるポート名に変更、コール内でhttp://localhost:3000が表示されますが。

これにはうまく対応していると思われる追加情報があります。Postman - Testing your API'sを参照すると、発生する可能性のあるエラーをデバッグするのに役立ちます。

+0

ありがとうございます。あなたはもっと明確に、特に私の上記のコードで説明できますか? – ryannguyen

+0

@ryannguyen更新された回答をご覧ください。 –

+0

あなたの答えに非常に感謝します。 Nodeプロジェクトに接続されたAngular 2プロジェクトをどのように知ることができますか?私はあなたの答えに従いましたが、角度2でメールを送信するボタンをクリックすると、Nodeプロジェクトのコンソールに正常な送信メッセージが表示されません。 – ryannguyen

関連する問題