2017-12-05 8 views
1

hereの例に従ったメール確認メーラーを作成しようとしています。私はemail-templatenodemailerの両方のパッケージを追加しました。アプリケーション全体でtransporterをアダプターとして使用可能にしました。私の実際のコントローラでNodeMailer - トランスポートオプションはトランスポートインスタンスまたは設定オブジェクトである必要があります

const EmailTemplate = require('email-templates'); 
var mailer = require('../mailer'); 

var sendEmailVerficationLink = mailer.templateSender(
    new EmailTemplate({ 
     views: { root: './verify' } 
    }), { 
     from: process.env.MAIL_FROM, 
    }); 

exports.sendVerficationLink = function (obj) { 
    sendEmailVerficationLink({ 
     to: obj.email, 
     subject: 'Verify your Email' 
    }, { 
      name: obj.username, 
      token: obj.otp 
     }, function (err, info) { 
      if (err) { 
       console.log(err) 
      } else { 
       console.log('Sign up mail sent to ' + obj.email + ' for verification.'); 
      } 
     }); 
}; 

、私はuser.ts次のようにメールを送信しよう:私はsignup.ts以下のようなemail-templateのラッパーを構築しようとしています

import * as mailer from 'nodemailer'; 
import * as dotenv from 'dotenv'; 

dotenv.load({ path: '.env' }); 

var mailConfig = { 
    host: process.env.MAIL_HOST, 
    port: process.env.MAIL_PORT, 
    auth: { 
     user: process.env.MAIL_USERNAME, 
     pass: process.env.MAIL_PASSWORD 
    } 
}; 

var transporter = mailer.createTransport(mailConfig); 

module.exports = transporter; 

:以下はmailer.tsのコードです

var verify = require('../utils/mailer-templates/signup'); 
signup = (req, res) => { 
    .. 
    verify.sendVerficationLink(obj); // send the actual user object 
    .. 
} 

しかし、私はこのエラーを得続けます

Error: Transport option must be a transport instance or configuration object 
[1]  at new Email (C:\Users\User\Documents\Vivavii-REST\node_modules\email-templates\lib\index.js:82:83) 
[1]  at Object.<anonymous> (C:\Users\User\Documents\Vivavii-REST\dist\utils\mailer-templates\signup.js:3:54) 
[1]  at Module._compile (module.js:641:30) 
[1]  at Object.Module._extensions..js (module.js:652:10) 
[1]  at Module.load (module.js:560:32) 
[1]  at tryModuleLoad (module.js:503:12) 
[1]  at Function.Module._load (module.js:495:3) 
[1]  at Module.require (module.js:585:17) 
[1]  at require (internal/module.js:11:18) 
[1]  at Object.<anonymous> (C:\Users\User\Documents\Vivavii-REST\dist\controllers\user.js:14:14) 
[1]  at Module._compile (module.js:641:30) 
[1]  at Object.Module._extensions..js (module.js:652:10) 
[1]  at Module.load (module.js:560:32) 
[1]  at tryModuleLoad (module.js:503:12) 
[1]  at Function.Module._load (module.js:495:3) 
[1]  at Module.require (module.js:585:17) 

答えて

1

主な問題古くなった例を使用しました。この例では、nodemailerは2.7.2のバージョンと不明ですemail-templatesです。最新nodemailerバージョンは4.4.1です。

最新のメールテンプレートバージョンでは、のnodemailerで直接作業する必要はありません。トランスポート・パラメータで構成を渡すことができます。

const EmailTemplate = require('email-templates'); 
const dotenv = require('dotenv'); 

dotenv.load({ path: '.env' }); 

const emailTemplate = new EmailTemplate({ 
    message: { 
     from: process.env.MAIL_FROM 
    }, 
    transport: { 
     host: process.env.MAIL_HOST, 
     port: process.env.MAIL_PORT, 
     auth: { 
      user: process.env.MAIL_USERNAME, 
      pass: process.env.MAIL_PASSWORD 
     } 
    } 
}); 

function sendVerficationLink(obj) { 
    return emailTemplate.send({ 
     template: 'verify', 
     message: { 
      to: obj.email 
     }, 
     locals: { 
      name: obj.username, 
      token: obj.otp 
     } 
    }); 
}; 

exports.sendVerficationLink = sendVerficationLink; 

いくつかの詳細:ここにあなたのコードの修正バージョンがある

  • mailer.tsは、テンプレートとフォルダのメールがあるプロジェクトで
  • 冗長です。 infomation
+0

もっと私は 'exports.sendVerificationLink'に' exports.module =(VARNAME)を '変更し、別のモジュールにインポートしようとしたが、私はそれがmodule'のエラーではありません'取得しています。あなたは助けてもらえますか? – JackSlayer94

+1

私はなぜこれを行うのか分かりません。しかし、 'module.exports.sendVerificationLink'に変更しようとすることはできますか? また、commonjsモジュール(require/module.export)の代わりに、ECMAScript 6モジュール(インポート/エクスポート)を使って作業することをお勧めします。私はcommonjsモジュールのアプローチで私の例を書いたので、 'const sendVerficationLink = require( './ example');'が必要です。 1つのアプローチを選択し、このようなエラーを回避するためにプロジェクト全体で使用します。 – galkin

+0

ありがとう!私はes6に切り替えました。ありがとうございました!! – JackSlayer94

関連する問題