微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Send Grid Email Api 发送电子邮件 3 次

如何解决Send Grid Email Api 发送电子邮件 3 次

我正在使用发送网格电子邮件 API 来发送电子邮件以验证用户帐户。出于某种原因,每次生成 3 封电子邮件而不是一封,每封电子邮件都有不同的令牌。我正在使用相同的方法生成令牌并发送电子邮件以重置密码,而且效果很好。但是电子邮件验证令牌被发送了 3 次。

这段代码是next.js api。以下是我的代码

import nc from "next-connect";
import crypto from "crypto";
import sgMail from "@sendgrid/mail";
import { connectToDatabase } from "../../../util/mongodb";

export const config = {
  api: {
    externalResolver: true,},};
const handler = nc().post(async (req,res) => {
  const { email } = req.body;
  const { db } = await connectToDatabase();
      
  // //TTL Index for auto expiry,will be executed only once for index creation
  // db.collection("tokens-email").createIndex(
  //   { createdAt: 1 },//   { expireAfterSeconds: 3600 } //1 hour in seconds
  // );

  db.collection("users").findOne({ email },(error,user) => {
    if (error)
      return res
        .status(500)
        .json({ error: "an unkNown error occured,please try again" });
    if (!user) return res.status(400).json({ error: "user doesnt exist" });
    if (user.isverified)
      return res
        .status(200)
        .json({ success: "This account has already been verified" });

    const { name } = user;

    //check if token already exists for this user;
    db.collection("tokens-email").findOne({ email },token) => {
      if (error)
        return res
          .status(500)
          .json({ error: "an unkNown error occured,please try again" });

      //if token already exists,delete this token.
      if (token)
        db.collection("tokens-email").deleteOne({ email },(error) => {
          if (error)
            return res
              .status(500)
              .json({ error: "an unkNown error occured,please try again" });
        });

      //Create new token and save in db
      const newToken = crypto.randomBytes(128).toString("hex");

      db.collection("tokens-email").insertOne(
        {
          createdAt: new Date(),token: newToken,email,(error) => {
          if (error)
            return res
              .status(500)
              .json({ error: "there was an unkNown issue,please try again" });

          sgMail.setApiKey(process.env.SENDGRID_API_KEY);
          const msg = {
            to: email,from: "bm@basitminhas.com",subject: "Saqee's Online Store",text:
              "Hello " +
              name +
              ",\n\n" +
              "Please verify your account by clicking the link:" +
              process.env.CLIENT_URL +
              "api/confirm/" +
              newToken +
              "\n\nThank You!\n",};
          sgMail
            .send(msg)
            .then(() =>
              res.status(200).json({
                success:
                  "A verification email has been sent to " +
                  email +
                  ". It will  expire after one day. If you didn't get verification Email click on resend token.",})
            )
            .catch(() =>
              res
                .status(500)
                .json({ error: "technical issue,please click on resend" })
            );
        }
      );
    });
  });
});

export default handler;

谁能告诉我为什么会发生这种情况以及解决方案是什么??

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。