阿里云

介绍

  • 阿里云盘是一款速度快、不打扰、够安全、易于分享的网盘,你可以在这里存储、管理和探索内容,尽情打造丰富的数字世界。

执行思路

日志效果

邮箱效果

多账号单独管理

新增内容:

  • 新增给多账号发送邮件
    实现原理:使用循环变量来读取表单中的邮箱地址,直到遇到空值为止。每次读取到一个邮箱地址,都将其添加 到jsyxList数组中。然后,通过循环遍历jsyxList数组,并为每个邮箱地址发送邮件。

  • 新增每个人的签到内容只会发送给同一行的对应邮箱地址
    实现原理:将循环的范围从2到20改为对于每一行数据,获取对应的refresh_tokensflqjsyx的值,并进行相应的判断和处理。如果refresh_tokensflqjsyx的值符合条件(不为空且需要领取奖励且有接收邮箱地址),则进行签到和发送邮件的操作。签到成功后,将相关的签到内容存储在value变量中,然后将其发送给对应的邮箱地址。

  • 新增邮件发送状态,监测发送邮件成功与失败
    实现原理:在签到成功后使用log函数单独打印了"账号:13X***XXX-签到成功"的日志。然后,在发送邮件时,在调用log函数之前将签到内容存储在value变量中,并使用了try...catch语句来捕获邮件发送时可能发生的错误。在成功发送邮件时,会将成功信息记录到日志中,而在发送失败时,会将失败的具体错误信息记录到日志中。

代码对比

对比最初的代码,以下是对代码进行的优化和改进的列表:

  1. 引入日期时间处理:添加了获取当前日期并格式化的功能,使用toLocaleDateString方法获取当前日期,并将其作为签到通知的主题一部分。

  2. 函数封装:将延迟等待的逻辑封装成了sleep函数,用于等待一段时间。这使得代码更加模块化和可读性更高。

  3. 错误处理和异常捕获:在发起网络请求和其他关键操作中增加了错误处理和异常捕获的逻辑,以便在出现错误时能够提供错误提示并及时终止代码的执行。

  4. 优化日志输出:在代码中添加了日志输出函数log,用于将信息打印到控制台,并在发送邮件时打印相应的状态和错误信息。

  5. 变量命名优化:对部分变量进行了更具描述性的命名,使代码更易读。

  6. 邮件发送优化:增加了判断邮箱是否为预设发送邮箱的逻辑,并在控制台输出相应的提示信息。

综上所述,对代码进行了结构优化、错误处理、日志输出优化以及变量命名优化,提高了代码的可读性、可维护性和错误处理能力,使得代码更加健壮和易于使用。

修改后的代码

var myDate = new Date();
var data_time = myDate.toLocaleDateString();

function sleep(d) {
  for (var t = Date.now(); Date.now() - t <= d;);
}

function log(message) {
  console.log(message); // 打印到控制台
  // TODO: 将日志写入文件
}

var sftz = Application.Range("E" + 1).Text;
if (sftz == "是") {
  var zdyfs = Application.Range("H" + 1).Text;
  if (zdyfs == "是") {
    var zdy_host = Application.Range("H" + 2).Text;
    var zdy_post = Number(Application.Range("H" + 3).Text);
    var zdy_username = Application.Range("H" + 4).Text;
    var zdy_pasd = Application.Range("H" + 5).Text;
  } else {
    var zdy_host = "smtp.163.com";
    var zdy_post = 465;
    var zdy_username = "fs8484848@163.com";
    var zdy_pasd = "QADSEMPKDHDAVWVD";
  }

  // 配置发送邮箱

  let mailer = SMTP.login({
    host: zdy_host, // 邮箱 的SMTP服务器的域名
    port: zdy_post,
    username: zdy_username, // 邮箱地址
    password: zdy_pasd, // 邮箱的SMTP密码,非密码
    secure: true
  });

  for (let ii = 2; ii <= 20; ii++) {
    dyg = "A" + ii;

    var refresh_token = Application.Range(dyg).Text;
    var sflq = Application.Range("B" + ii).Text;
    var jsyx = Application.Range("E" + ii).Text;

    if (refresh_token != "" && sflq == "是" && jsyx != "") {
      // 发起网络请求-获取token
      let data = HTTP.post("https://auth.aliyundrive.com/v2/account/token",
        JSON.stringify({
          "grant_type": "refresh_token",
          "refresh_token": refresh_token
        })
      );
      data = data.json();
      var access_token = data['access_token'];
      var phone = data["user_name"];

      if (access_token == undefined) {
        log("单元格【" + dyg + "】内的token值错误,程序执行失败,请重新复制正确的token值");
      } else {
        try {
          var access_token2 = 'Bearer ' + access_token;
          // 签到
          let data2 = HTTP.post("https://member.aliyundrive.com/v1/activity/sign_in_list",
            JSON.stringify({ "_rx-s": "mobile" }),
            { headers: { "Authorization": access_token2 } }
          );
          data2 = data2.json();
          var signin_count = data2['result']['signInCount'];

          var logMessage = "账号:" + phone + "-签到成功, 本月累计签到" + signin_count + "天";
          var value = "";
          if (sflq == "是") {
            try {
              // 领取奖励
              let data3 = HTTP.post(
                "https://member.aliyundrive.com/v1/activity/sign_in_reward?_rx-s=mobile",
                JSON.stringify({ "signInDay": signin_count }),
                { headers: { "Authorization": access_token2 } }
              );
              data3 = data3.json();
              value = "本次签到获得" + data3["result"]["name"] + "," + data3["result"]["description"];
            } catch {
              value = "账号:" + phone + "-领取奖励失败";
            }
          } else {
            value = "奖励待领取";
          }

          log(logMessage + "\n" + value);

          try {
            mailer.send({
              from: "阿里云盘签到<" + zdy_username + ">", // 发件人
              to: jsyx, // 收件人
              subject: "阿里云盘签到通知-" + data_time, // 主题
              text: logMessage + "\n" + value, // 文本
            });
            log("账号:" + phone + "-已发送邮件至:" + jsyx);
          } catch (error) {
            log("账号:" + phone + "-发送邮件失败:" + error);
          }
        } catch {
          log("单元格【" + dyg + "】内的token签到失败");
          return;
        }
        sleep(1000);
      }
    }
  }
}

快速获取 token 值

//在控制台输入
var token = JSON.parse(localStorage.getItem('token'));
console.log('refresh_token:', token.refresh_token);

如何获取自己的SMTP

QQ邮箱获取自己的SMTP

来源转载