2016-11-21 10 views
1

私はNodeJSを初めて使用しています。 私は連絡先ページで作業を開始しました。このページは、送信されると、次のHTMLを含む確認メールをユーザーに送信します。 app.js. -NodeJS内の別のファイルからHTML(電子メール本文用)を読む方法

var mailer = require("nodemailer"); 

var emailBody = "<HTML above>"; 

// Use Smtp Protocol to send Email 
var smtpTransport = mailer.createTransport("SMTP",{ 
    service: "#######", 
    auth: { 
     user: "#########", 
     pass: "#######" 
    } 
}); 

var mail = { 
    from: "######################", 
    to: params.email, 
    subject: "Welcome user.", 
    text: "", 
    html: emailBody 
} 

smtpTransport.sendMail(mail, function(error, response){ 
    if(error){ 
     console.log("Mail error:>>"); 
     console.log(error); 
    }else{ 
     console.log("Message sent: " + response.message); 
    } 

    smtpTransport.close(); 
}); 

現在、nodemailerを使用して、私は同じファイルで定義されたHTML本体と、この電子メールを送信しています:電子メールを送信するためのコードが続き

<p>Hello Sujit,</p> 
<p>Thank you for approaching us.</p> 
<p>We have received your request and our executive will get in touch with you soon.</p> 
<p>Thank you.</p> 

これまでのところうまくいきます。 しかし、ボディコンテンツを直接管理できるように、HTMLを変数/プレースホルダで「名前」と別のファイルに配置する方法はありますか?本文の内容を変数emailBodyにロードできる方法。

ありがとうございました。

+0

ノードは、テンプレートのために利用可能な多くのモジュールを有しています。 – Quentin

+2

https://nodemailer.com/2-0-0-beta/templating/ – Rayon

答えて

2

はい!特定の電子メールのためのテキストファイルを作成する内部に "テンプレート"という名前の1つのフォルダを作成します。 welcome.txtのように。

<p>Hello #name,</p> 
<p>Thank you for approaching us.</p> 

等WELCOME.TXT書き込みコードで、あなたがfs.readFile([ファイルパス])のような、そのファイルを読み取り、変数にこの値を格納することができるFSモジュールを使用。 var mailContent = fs.readFile([ファイルパス])と同様です。次に、javascript replace関数を使用して#nameを実際の名前に置き換えます。 Like mailContent.replace( '#name'、 'abcd')

+1

その参考になった場合。受け入れられるとマークしてください – AJS

+1

大きなアプリケーションや大きなHTMLメールの場合は、nodemailerのテンプレートを使用すると便利ですが、このような小さな目的のためには、この解決法が有効です。ありがとう! –

0

はい、キー値のペアでJSON構造を維持できます。

template.json

{

"件名": "承認メール"、

"ボディ":上記HTML

}

そして、あなたが必要と読むことができますこのJSONを渡すか、これを関数のパラメータとして渡します。

var template = require( './ templates.json);

VARメール= {

from: "######################", 
to: params.email, 
subject:template.Subject, 
text: "", 
html: template.Body 

}

+0

これはこれを行うには良いアプローチだとは思わない。 HTMLが別々のファイルに保存されている場合、UIユーザーは簡単にHTMLを変更することができます。 –

+0

ええ、確かにこれは要件と異なります。このアプローチは、複数のテンプレートをオンザフライで構成する場合に役立ちます。これで、HTMLとサブジェクトのマッピングを同じ場所で設定できるJSONのすべてのテンプレートとサブジェクトの設定を行うことができます。 –

関連する問題