仅发送带有预订表格的第一封电子邮件

问题描述 投票:0回答:1

我有一个包含三阶段预订表格的网站。它使用谷歌重新验证码验证表单,然后应该使用邮戳使用一个模板向客户发送电子邮件,然后使用单独的模板向客户发送电子邮件,然后将我作为备份。

问题是它在开发中工作,然后当我将其推送到现场时,它只发送每个阶段的第一封电子邮件(而不是将阶段 1 和 2 发送给客户和我,将阶段 3 发送给客户、客户和我)。 postmark email activity

我对 Node.js 不是最好的,所以感觉我可能在 .then 部分做错了什么?如有任何反馈/建议,将不胜感激!

*注意:我已经包含了下面表格的第一阶段,它更容易阅读并且具有相同的格式,我意识到我可以使用邮戳批量发送,因为我没有在这里更改模板,而是在表格 I 的第三阶段中使用不同的模板,并且存在相同的问题,即跨表单阶段仅发送第一封电子邮件。抱歉造成任何混乱。

// Require:
var postmark = require("postmark");

// Send an email:
var client = new postmark.ServerClient(process.env.POSTMARK_AUTH);

//function to validate token with google re-captcha
async function validateHuman(token){
const secret = process.env.GATSBY_RECAPTCHA_SECRET;
const response = await fetch(`https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${token}`,
  {
      method: "POST",
  } 
)
const data = await response.json();
return data.success;
}

//main function
export default async(req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  console.log(req.body);
  //call re-captcha validation function
  const human = await validateHuman(req.body.token);
  if (!human){
      // console.log("this message shows we're getting to the !human part")
      res.status(400);
      res.json({errors: ["Please, you're not fooling us, bot."]})
      return;
  }
  try {
    let message = {
      "From": "*clientemail",
      "To": "*clientemail",
      "ReplyTo": "*clientemail",
      "TemplateId" : 36706722,
      "TemplateModel": {
        "name": req.body.name,
        "email": req.body.email,
        "phone": req.body.phone,
        "message": req.body.message
      },
      "MessageStream": "outbound"
    }
    //send emails if human
    client.sendEmailWithTemplate(message).then(
      () => {
        //I update email template here too in later form stage
        console.log("customer-support-sent")
        message.To = "[email protected]"
        message.ReplyTo = req.body.email
        client.sendEmailWithTemplate(message)
      }
    ).then(
      () => {
        console.log("client-support-sent")
        // message.To = "[email protected]"
        // console.log(message)
        // client.sendEmailWithTemplate(message)
      }
    ).then(
      () => {
        console.log("backup-support-sent")
        return res.status(200).json({
          message: "This is updated",
        })
      }
    )
  } catch (err) {
    console.log(err)
    return res.status(500).json({ message: "There was an error", error: err })
  }
}
node.js email gatsby postmark
1个回答
0
投票

查看您的屏幕截图,您的假设似乎不正确,电子邮件正在“发送”,而 gmail 不接受它。

根据 邮戳文档,“已处理” 意味着您发送的电子邮件正常,但他们试图将其交给收件人的电子邮件服务器,并且您的电子邮件要么送达,要么退回,您无能为力快点吧。如果它确实反弹,你会学到更多。

来自这些文档:

当消息卡在“已处理”状态时,通常除了等待之外没有什么可做的。也就是说,如果您发现特定电子邮件提供商的已处理邮件突然显着增加,请告知我们的团队,我们可以进一步调查这一情况。


也有可能只是 Gmail 问题。尝试使用 https://www.mailinator.com 进行测试。他们几乎会接受任何东西,所以你可以看看这是“gmail 问题”还是“你的问题”。

© www.soinside.com 2019 - 2024. All rights reserved.