集成Mailgun和Firebase云功能

时间:2019-02-04 01:19:54

标签: javascript firebase google-cloud-functions mailgun

我一直在尝试使用mailgun将某些信息发送到指定的电子邮件帐户。我正在使用Mailgun和firebase的付费版本。我尝试了以下方法:

显然,这只是我的功能之一。在此功能中,我将用户余额设置为0,然后使用该值将电子邮件发送到电子邮件帐户。

但是我什至无法发送没有任何信息的电子邮件...

var mailgun = require('mailgun-js')({
  apiKey: 'key-MY_KEY', 
  domain: 'https://api.mailgun.net/v3/MY_DOMAIN/messages'
})
exports.initiateBankPayout = functions.https.onRequest((request, response) => {
  // Ensure there is authorization data in the request header
  if (!request.headers.authorization || !request.headers.authorization.startsWith('Bearer ')) {
    console.log("Unauthorized request")
    // Return forbidden status code
    return response.sendStatus(403)
  }

  let idToken
  if (request.headers.authorization && request.headers.authorization.startsWith('Bearer ')) {
    idToken = request.headers.authorization.split('Bearer ')[1]
  }

  // Verify the requestor's credentials
  const authPromise = admin.auth().verifyIdToken(idToken)

  return authPromise.then((user) => {
    const userId = user.user_id

    const db = admin.database()
    const userBalanceRef = db.ref(`users/${userId}/availableBalance`)

    return Promise.all([userBalanceRef.once("value"), userBalanceRef])
  }).then(([currentBalance, userBalanceRef]) => {
    // Transaction promise to set user's balance to $0
    const balanceAdjustment = userBalanceRef.transaction((currentBalance) => {
      return "0"
    })

    // Fulfillment callback will be passed a boolean success parameter, and the balance before the adjustment
    return Promise.all([balanceAdjustment, currentBalance.val()])
  }).then(([committed, previousBalance]) => {
    if (committed && committed.committed) {
      /** 
       * INSERT CODE FOR SENDING EMAIL HERE
       * use previousBalance arguemnt to get the balance prior to adjustment
       **/

       var dt = {
        from: 'Excited User <mailgun@MY_DOMAIN.com>',
        subject: 'Welcome!',
        html: `<p>Welcome! ${user.name}</p>`,
              'h:Reply-To': 'mailgun@MY_DOMAIN.com',
        to: 'email@gmail.edu',
        //text: 'Testing some Mailgun awesomeness!'
      };

      mailgun.messages().send(dt, function (error, body) {
        console.log(body);
        console.log(error);
      });
       //end of new stuff

      return response.send({
        data: {
          success: true
        }
      })
    }

    // If committed === false, then an undefined error occurred
    return response.status(500).send("Internal error: user balance adjustment failed")
  }).catch((err) => {
    console.error(err)
    return response.status(500).send(`Internal error: ${err}`)
  })
})

我认为也许在初始化apiKey:'key-My_Key'时是否需要apiKey:'key-'或其他格式?

我尝试过在线查找,但是大多数提出此类问题的人都是那些没有为此付费的人。关于如何为实际付费的人做到这一点的任何线索?我不知道这里可能有什么错误。

0 个答案:

没有答案