【问题标题】:How do you extract phone numbers from email bodies in Outlook?如何从 Outlook 中的电子邮件正文中提取电话号码?
【发布时间】:2020-09-25 02:32:07
【问题描述】:

我有一个相当大的帐户,在 Outlook 中有大约 2 万封电子邮件,我需要从这些电子邮件中提取电话号码。

电子邮件的一个例子是:

From: Amy Schwartz <amy@blahdyblah.com>

Dear Anatoliy, 
I want you to do blahdy blahdy blah.

Amy Schwartz
(347) 555-1212 <---- I want this
Blahdy Blah Company

我们的想法是通过每封电子邮件并通过正则表达式匹配最后一个电话号码并以以下格式导出列表:

  • 姓名:来自“发件人”字段的姓名
  • 电子邮件:来自“发件人”字段的电子邮件
  • 电话:电子邮件文本中匹配的最后一个电话号码

您对如何执行此操作有任何想法吗?

更新:没有找到任何预构建的解决方案,但我正在拼凑我自己的using this。 codeTwo Outlook Express。您可以将任何电子邮件字段(正文、HTML 正文、发件人、发件人姓名)导出为 CSV。这有点慢(在运行 Win7 VM 的 i7 iMac 上显示一条消息 3 秒)。但它有效:) 从那里我可能只是放入一个数据库并做一些正则表达式魔术。完成后将发布过程。

【问题讨论】:

  • 我建议首先获取所有包含数字的行,无论它是什么。如果您处理 20K 大小,我假设电话号码的形式可能会非常不同。然后玩一个正则表达式,它选择任何只包含 - 或 ) 的数字。希望这会有所帮助

标签: regex csv outlook


【解决方案1】:

想通了。如果您知道如何制作 Node.js 脚本,这将非常容易(但我相信您可以用 Bash 编写一个)。

1) 使用Outlook Export 插件将您的所有电子邮件导出为 CSV。确保电子邮件是第一列,名称是第二列,正文(文本)是第三列。

2) 在 Node JS 中与电子邮件的 CSV 相同的目录中编写以下脚本

var fs = require('fs');
var csv = require('csv');
csv()
    .from.stream(fs.createReadStream(__dirname+'/data.csv'))
    .to.path(__dirname+'/out.csv')
    .transform( function(row){
      var match = row[2].match(/(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})/);
        return '"' + row[0] + '","' + row[1] + '","' + (match ? match[0] : '') + '"\n';
    })
    .on('error', function(error){
      console.log(error.message);
    });

并使用node script.js 运行它。

就是这样!运行速度超快(20k 封电子邮件约 20 秒)。

如果您有任何建议,请告诉我(或将其打包成可下载的可执行文件)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2012-05-22
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多