3

nodemailer使用するトランスポートの種類にとらわれない電子メール システムをセットアップしようとしています。

これが私が電子メールを送信しようとしている方法です:

const config = require('config')
const mailerConfig = config.get('mailer')
const transporter = nodemailer.createTransport(mailerConfig.transport)
transporter.sendMail({
  from: mailerConfig.from,
  to: toEmail,
  subject,
  text: textBody,
  html: htmlBody,
})

そして、ここに私のconfigファイルがどのように見えるかがあります:

const AWS = require('aws-sdk')
module.exports = {
  mailer: {
    from: 'test_sender@domain.com',
    transport: {
      SES: new AWS.SES({
        accessKeyId: 'secret-key',
        secretAccessKey: 'access-key',
        region: 'region',
      }),
    },
  }
}

その後、メールを送信しようとすると、次のエラーが表示されます。

error:  TypeError: Key must be a buffer
    at new Hmac (crypto.js:117:16)
    at Object.Hmac (crypto.js:115:12)
    at Object.hmac (/Users/sebi/Work/node_modules/aws-sdk/lib/util.js:401:30)
    at Object.getSigningKey (/Users/sebi/Work/node_modules/aws-sdk/lib/signers/v4_credentials.js:59:8)
at V4.signature (/Users/sebi/Work/node_modules/aws-sdk/lib/signers/v4.js:97:36)
at V4.authorization (/Users/sebi/Work/node_modules/aws-sdk/lib/signers/v4.js:92:36)
at V4.addAuthorization (/Users/sebi/Work/node_modules/aws-sdk/lib/signers/v4.js:34:12)
at /Users/sebi/Work/node_modules/aws-sdk/lib/event_listeners.js:215:18
at finish (/Users/sebi/Work/node_modules/aws-sdk/lib/config.js:320:7)
at /Users/sebi/Work/node_modules/aws-sdk/lib/config.js:338:9
at /Users/sebi/Work/node_modules/aws-sdk/lib/credentials.js:123:23
at Credentials.refresh (/Users/sebi/Work/node_modules/aws-sdk/lib/credentials.js:194:5)
at Credentials.get (/Users/sebi/Work/node_modules/aws-sdk/lib/credentials.js:121:12)
at getAsyncCredentials (/Users/sebi/Work/node_modules/aws-sdk/lib/config.js:332:24)
at Config.getCredentials (/Users/sebi/Work/node_modules/aws-sdk/lib/config.js:352:9)
at Request.SIGN (/Users/sebi/Work/node_modules/aws-sdk/lib/event_listeners.js:192:22)

AWS.SES()メールを送信しているのと同じ場所でインスタンスを作成している場合、コードは正常に機能することに注意してください。configコードを壊す特別なことはありますか?

4

3 に答える 3

0

私は のメンテナーの 1 人ですnode-confignode-config単純なデータを元に戻したい場合に、構成オブジェクトにいくつかのメソッドを追加したことが問題のようです。

v1.27.0 以降config.util.toObject(someValue)指定された設定値に対してプレーンな古い JavaScript オブジェクトを取得できるようにするために追加されました。これは、utils wiki ページに記載されています。

の古いバージョンがnode-configあり、アップグレードしたくない場合は、 によって返される構成構造体でもこれを行いますnode-config

var plainOldValue = JSON.parse(JSON.stringify(configValue)

これは、によって追加されたメソッドを削除する効果がありnode-config、新しい.toObject()メソッドが内部で行うこととまったく同じです。

于 2018-02-28T14:52:19.627 に答える