本站不兼容 8 以前的版本的 Interner Explorer 浏览器(或基于这些版本的 IE 的其他浏览器),并且页面样式不完全兼容 IE 8,我们建议你升级至 IE 9 或改用其他非 IE 浏览器

Mozest™

  • 正在加载用户菜单…

开放、分享、互助

转播到腾讯微博
返回列表 回复 发帖

[交流] 通过邮件头得到发件人ip的一点研究

本帖最后由 slimx 于 2012-3-30 11:40 编辑

关于发件人ip地址,并没有现成的方法,只能通过解读邮件头的方式.

"X-Originating-IP"是大多数service都在使用的字段.

aol比较特别,它的字段是"X-AOL-IP".

有的service并没有明确的字段标识发件人ip,比如gmail,这就需要分析"Received from"了,一个head中可能会有多个"Received from",一般来说,最后一个包含了真正的发件人信息.

代码就比较简单了,假设我们已经得到了msg:nsIMsgDBHdr
  1. MsgHdrToMimeMessage(msg, null, callbackMimeMessage, true);
  2. function callbackMimeMessage(msgHdr, mimeMsg) {
  3.             let fromIp = "";
  4.             //一般的
  5.             if(mimeMsg.has("X-Originating-IP")){
  6.                 fromIp = mimeMsg.get("X-Originating-IP").replace(/(^\[)|(\]$)/g,"");
  7.             }
  8.             //aol
  9.             else if(mimeMsg.has("X-AOL-IP"))
  10.             {
  11.                 fromIp = mimeMsg.get("X-AOL-IP");
  12.             }
  13.             //从received尝试获取
  14.             else
  15.             {
  16.                 let received = mimeMsg.getAll("Received").reverse();

  17.                 for each(let i in received)
  18.                 {
  19.                     if(i.search(/^from/i)>-1)
  20.                     {
  21.                         if(i.match(/\[(.*?)\]/)){
  22.                         fromIp = RegExp.$1;
  23.                         break;
  24.                         }
  25.                     }
  26.                 }
  27.             }
  28.             //code
  29. }
复制代码
如果用网页邮箱发邮件比如GMAIL,得到的就是GMAIL发件服务器的IP了吧?
如果网页端的邮箱不把原始登录者的IP记录进去,那看到的应该只是网站邮箱服务器的IP吧。
好样的我看好你们  哈哈 谢谢分享
只是来下软件的
3# royallin


  的确如此,用网页版的 GMail 发邮件不会收集发件人的 IP. 以前微软的邮箱不隐藏 IP, 现在也向 GMail 学习。不过国内的两大免费电邮 163, QQ 依然不隐藏 IP
如果网页端的邮箱不把原始登录者的IP记录进去,那看到的应该只是网站邮箱服务器的IP吧。
royallin 发表于 2012-3-30 22:23
  的确如此,用网页版的 GMail 发邮件不会收集发件人的 IP. 以前微软的邮箱不隐藏 IP, 现在也向 GMail 学习。不过国内的两大免费电邮 163, QQ 依然不隐藏 IP