You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js脚本:解决Nodemailer针对失效URL重复发邮件问题

解决多失效URL发送单封邮件的问题

核心思路是先批量收集所有访问失败的URL信息,再统一发送一封包含全部失效条目的邮件,而非逐个触发邮件发送。

修改后的完整代码:

const request = require("request");
const nodemailer = require("nodemailer");

const urlList = [
  "https://www.google.com",
  "https://www.mongodb.com",
  "https://www.mongoslsdb33.com",
  "https://www.google.comslflalfdkjlsdfj",
];

const transporter = nodemailer.createTransport({
  host: "smtp.gmail.com",
  port: 587,
  auth: {
    user: "email",
    pass: "password",
  },
  secure: false,
});

function getStatus(url) {
  return new Promise((resolve, reject) => {
    request(url, function (error, response, body) {
      resolve({
        site: url,
        status: !error && response.statusCode === 200
          ? "OK"
          : `Down: ${error ? error.message : `Status Code ${response.statusCode}`}`,
      });
    });
  });
}

let promiseList = urlList.map((url) => getStatus(url));

Promise.all(promiseList).then((resultList) => {
  // 过滤出所有访问失败的URL信息
  const failedUrls = resultList.filter(result => result.status.startsWith("Down"));

  // 只有存在失效URL时才发送邮件
  if (failedUrls.length > 0) {
    console.log("检测到失效URL:", failedUrls);
    // 生成邮件中的失效URL列表HTML
    const failedListHtml = failedUrls.map(item => `<li>${item.site}: ${item.status}</li>`).join('');
    
    const message = {
      from: "from-email",
      to: "to-email",
      subject: "URL访问状态异常通知",
      html: `<h1>以下URL访问出现异常:</h1>
            <ul>${failedListHtml}</ul>`,
    };

    transporter.sendMail(message, function (err, info) {
      if (err) {
        console.log("邮件发送失败:", err);
      } else {
        console.log("邮件发送成功:", info);
      }
    });
  } else {
    console.log("所有URL访问正常");
  }
});

关键改动说明:

  • 新增failedUrls数组,通过filter方法一次性筛选出所有访问失败的URL记录
  • 仅当failedUrls不为空时,才执行邮件发送逻辑
  • 用map方法将所有失效URL拼接成有序列表的HTML片段,让邮件内容更清晰
  • 优化了状态信息:当无网络错误但状态码非200时,显示具体状态码(原代码只处理了error场景,遗漏了状态码非200但无错误的情况)

额外提示:request库已停止维护,建议后续替换为axios或node-fetch等活跃维护的HTTP请求库。

内容的提问来源于stack exchange,提问作者ujjwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:35:24