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

新手使用Evernote JavaScript SDK提取笔记邮箱数组,求后续操作指引

用Evernote JavaScript SDK提取笔记中的邮箱列表(Node.js实现)

嘿,恭喜你已经搞定了API密钥和SDK安装这两个关键前置步骤!接下来咱们一步步把提取邮箱的功能落地,流程其实很清晰:

1. 获取开发者令牌(测试阶段快速认证)

因为你用的是测试API密钥,直接用开发者令牌比走完整OAuth流程更高效,不用处理回调这些麻烦事:

  • 登录Evernote开发者控制台,进入沙箱环境(Sandbox)
  • 在你的应用详情页里找到「Developer Token」,点击生成并复制这个令牌

然后在代码里初始化Evernote客户端:

const Evernote = require('evernote');

// 配置信息
const config = {
  token: '你的开发者令牌',
  sandbox: true, // 测试环境必须设为true
};

// 初始化客户端与笔记存储对象
const client = new Evernote.Client(config);
const noteStore = client.getNoteStore();

2. 获取目标笔记列表

接下来要拿到你保存网页的那些笔记。可以先获取默认笔记本,再拉取该笔记本下的所有笔记:

async function getTargetNotes() {
  // 获取用户的默认笔记本
  const defaultNotebook = await noteStore.getDefaultNotebook();
  // 构建笔记筛选条件(这里取该笔记本下的所有笔记,也可按标题/创建时间过滤)
  const filter = new Evernote.NoteFilter({ notebookGuid: defaultNotebook.guid });
  const spec = new Evernote.NotesMetadataResultSpec({ includeTitle: true });
  
  // 拉取笔记元数据(先拿列表,后续再单独取内容)
  const notesMetadata = await noteStore.findNotesMetadata(filter, 0, 100, spec);
  return notesMetadata.notes;
}

注意:findNotesMetadata的第三个参数是最大返回数量,测试阶段设100足够,如果你笔记更多可以做分页处理。

3. 提取笔记内容中的邮箱

Evernote的笔记内容是ENML格式(类似HTML的标记语言),所以先把ENML转成纯文本,再用正则匹配邮箱:

// 处理ENML,提取纯文本
function enmlToPlainText(enml) {
  // 去掉所有ENML/HTML标签,保留纯文本
  return enml.replace(/<[^>]+>/g, '').trim();
}

// 匹配邮箱的正则表达式
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;

async function extractEmailsFromSingleNote(noteGuid) {
  // 获取完整笔记内容(参数控制只拉取必要字段)
  const note = await noteStore.getNote(noteGuid, true, false, false, false);
  const plainText = enmlToPlainText(note.content);
  // 匹配所有邮箱,无匹配则返回空数组
  const emails = plainText.match(emailRegex) || [];
  return emails;
}

4. 整合流程,收集所有邮箱并去重

最后把所有步骤串起来,收集所有笔记里的邮箱,再去重得到最终数组:

async function main() {
  try {
    const notes = await getTargetNotes();
    let allEmails = [];
    
    // 遍历每个笔记提取邮箱
    for (const note of notes) {
      const emails = await extractEmailsFromSingleNote(note.guid);
      allEmails = [...allEmails, ...emails];
    }
    
    // 去重处理,得到唯一邮箱数组
    const uniqueEmails = [...new Set(allEmails)];
    console.log('最终提取到的邮箱列表:', uniqueEmails);
  } catch (error) {
    console.error('执行出错:', error.message);
  }
}

// 启动主流程
main();

一些实用提醒

  • 沙箱环境的笔记是独立于你真实Evernote账号的,若要提取真实账号内容,需把sandbox设为false,并换成生产环境的API密钥和令牌
  • 如果笔记里的网页结构复杂,enmlToPlainText可能不够完善,你可以用cheerio库解析ENML(先通过npm install cheerio安装,再用它提取文本)
  • 注意Evernote的API请求频率限制,批量处理时可以加个小延迟避免触发限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:51