我有一个包含三阶段预订表格的网站。它使用谷歌重新验证码验证表单,然后应该使用邮戳使用一个模板向客户发送电子邮件,然后使用单独的模板向客户发送电子邮件,然后将我作为备份。
问题是它在开发中工作,然后当我将其推送到现场时,它只发送每个阶段的第一封电子邮件(而不是将阶段 1 和 2 发送给客户和我,将阶段 3 发送给客户、客户和我)。
我对 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 })
}
}
查看您的屏幕截图,您的假设似乎不正确,电子邮件正在“发送”,而 gmail 不接受它。
根据 邮戳文档,“已处理” 意味着您发送的电子邮件正常,但他们试图将其交给收件人的电子邮件服务器,并且您的电子邮件要么送达,要么退回,您无能为力快点吧。如果它确实反弹,你会学到更多。
来自这些文档:
当消息卡在“已处理”状态时,通常除了等待之外没有什么可做的。也就是说,如果您发现特定电子邮件提供商的已处理邮件突然显着增加,请告知我们的团队,我们可以进一步调查这一情况。
也有可能只是 Gmail 问题。尝试使用 https://www.mailinator.com 进行测试。他们几乎会接受任何东西,所以你可以看看这是“gmail 问题”还是“你的问题”。