mdusaJboss
2012-07-09 19:50
浏览 575
已采纳

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • liuyinhuan0409 2012-07-10 08:45
    已采纳

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

    已采纳该答案
    打赏 评论
  • wayne_ren 2012-07-10 09:52

    从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

    1 打赏 评论
  • feizhuzi 2012-07-09 22:31

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

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

    打赏 评论

相关推荐 更多相似问题