JavaMail如何获取邮件发送者的IP?

利用javaMail来解析邮件(eml文件),通过MimeMessage对象可以轻松的获取像邮件的主题、发送邮箱、接受邮件、内容、发送时间等信息。但是对于发送者的IP没有提供对应的API,不知道有什么办法可以获取这个值。谢谢!

IP并非必需要有的字段,故javamail没有写相应的方法来获取,但javamail使用了通用方法,getHeader("...")来取某字段值,
如getHeader("X-OriginaIP")[0]来取IP值.

从Header的Received中通过正则可以取到。一般一对一发信的话取数组中第一个元素。比如:
[code="java"]
String r = mimeMessage.getHeader("Received")[0];

Pattern datapattern = Pattern.compile(".+\[(.+)\].+", Pattern.CASE_INSENSITIVE);
Matcher tagMatcher = datapattern.matcher(r);
if (tagMatcher.find()) {
System.out.println("IP:" + tagMatcher.group(1));
}
[/code]

但是这样也会有很多中情况,比如:
1、如果是从群组邮件转过来的话Received会有多个,看你想取哪个。
2、Received中也可能会匹配出多个IP

javamail里面有个api getHeader(str),可以获得邮件头字段的信息,具体是哪个邮件头,请参考 (实际上获取发送者的IP不是那么实际)

http://aruljohn.com/info/howtofindipaddress/