提取OutLook邮件里面的邮件头信息(发件人、收件人)
因为之前发email的时候,被win10的惊喜更新砸中,而我也不小心点了一下,所以控制台的发送日志全没了,面对着已经发了的1000多个邮件,也不能根据最后一个发的人做分割(因为有可能,因为网络原因,有的人发的会靠后一点,作为一个程序员,怎么可能一封一封的比对,这辈子都不可能一封一封的比对的)
其实主要是借助工具,代码层面相信大家都会
首先说明:
1、outlook可以直接拖拽出来邮件文件,但是是.msg格式的,我尝试了一下,也能读取到,虽然读到一大堆乱七八糟的乱码信息,但是主要信息还是清晰可见的,邮件主题还是非常清晰的,但是对于邮件头,虽然看起来很明显,但是正则匹配不到想要的这些,我感觉这就是msg的文本格式问题,提取不出来收件信息
2、主要思路是,通过使用工具,把邮件批量导出为.txt文本格式,这样就一点问题都没有,思路理清楚了开始行动
使用工具
一封或少量邮件可以不使用工具,直接在,outlook中上方点击“文件”–“另存为”然后选择txt格式就ok了,但是大量几百封上千封这样子估计手都要掉了,所以使用工具 搜索“KUTOOLS for outlook”,我这里就不骗大家东西了啊,自己去搜索,搜不到私聊我,我发给你,搜索下载,虽然只有90天免费使用,但是一天就够了~
安装完成后重启一下outlook,就可以了,上面就会出现KUTOOLS,然后大概第三栏有个存为其他格式,好,先不要点击,先选中要另存的文件(然后再点击这个另存为)选择txt,看需求是否选择邮件主题(这些操作步骤,大家先看看,如果不会就留言,如果留言多了我到时候就更新一下详细的步骤,或者1对1解答)
这个时候已经全部导出到一个文件夹里了,而且全是txt文本
编写代码
那个。。。。我刚学习Python,虽然也是刚学习Java,所以两个混着来了,但是思路是绝对清晰地。。。。
先读取所有文件—然后正则匹配,我不用Python写的原因是因为,我还不会Python的io。。。。(┬_┬)
package IOexp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReadOutlookReceiver {
public static void main(String[] args) {
try {
String s = "";
File file = new File("d:/文件夹路径");
// 读取文件夹内所有的文件
File[] files = file.listFiles();
int i = 0;
List<String> list = new ArrayList<>();
for (File file1 : files) {
System.out.println(file1.getName());
// 读取每一个TXT文件的信息
BufferedReader br = new BufferedReader(new FileReader("D:\\文件夹路径" + file1.getName()));
String s1 = null;
// 限制为20 是提高一点点效率,因为我只需要邮箱
for (int j = 0; j < 20; j++) {
// 一行一行读取
s = br.readLine();
s1 = String.valueOf(s);
// 正则匹配读取qq邮箱
Pattern pattern = Pattern.compile("[1-9][0-9]{4,}@qq.com");
Matcher matcher = pattern.matcher(s1);
if (matcher.find()) {
String qq = String.valueOf(matcher.group().substring(0, matcher.group().indexOf("@")));
// 把读取到的qq放到list里面,根据需要取字符串qq还是普通qq号
list.add("\"" + qq + "\"");
// list.add(qq);
System.out.println(matcher.group());
}
}
i++;
br.close();
}
// 打印总共堵了多少个文件
System.out.println(i);
// 打印list内容
System.out.println(list);
// 打印list的大小,比对i的大小,从而对比数量是否正确
System.out.println(list.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后。。。把list复制粘贴到Python中去,如果你会Python读取文件,就可以直接用这个list了。。。。然后list与list之间对比一哈,就可以看出差别了~
本文主要是告知有这样一个工具可以使用,可以换种思路,提取到的.msg文件无法使用正则匹配,就可以转为文本进行匹配,从而比较差距