163邮箱登录算法、接口解析分享

2018年3月24日 1.3k 次阅读 0 条评论 2.4k 个文字

今天为大家带来的是163邮箱登录的算法、接口实战教程。这个具体能做什么,那就看各位大佬们怎么用啦,比如xx网新用户注册邀请送xx,xx网注册领优惠券,全自动软件嗷嗷的爽。话不多说,咱们开始进入正题吧。

加密算法

163邮箱登录的RSA加密算法,这里为大家提供一段经过我处理后的RSA加密的JS代码,直接传入调用方法即可生成加密后的字符串。调用方法如下:

function rsaPwd(password) {
    bodyRSA(publicExp, modulus);
    return encryptedString(key, encodeURIComponent(password));
};

账号登录

登录接口的具体请求头如下:(username为登录邮箱账号,password为rsa加密后的密码,其他接口也一样)

URL = "http://m.mail.163.com/login.s"
Method = "POST"
Postdata = "method=login&back_url=&timestamp=0&m=1&register=0&wml=false&srandid=&ucid=&publicExponent=10001&modulus=967094d470dc7940f32ab7e8b701cf2ca732c7cd7aed176ecd8cac605da26e5fc8664382bb2c0b73b8a0109016130ff0c0f73985fa990a18466008b14284969d58f2c2c2698f91b6dcc6bebd90663d288dca79586b8294a56619dd87ab21274088c318e26b6e3210b165118b87ebc8798df572b2b84cfa9fe54d04e3b8dc1b25&username={username}&domain=163.com&password={password}"
Referer = "http://m.mail.163.com/login.s"

从请求后的响应数据里取出sid以及mCookies,这两个参数是登录的唯一标识,在后面的任何操作里都会用到,所以我们需要在登录后提取出这两个数据。从返回的数据里可以看到类似这样的数据:sid=xxxxxx&mCookie=xxxxxx&amp,因为每次登录的都会变动,咱们用正则表达式匹配出来。

var regex = new Regex("sid=(.*?)&mCookie=(.*?)&amp");
var match = regex.Match(res);
sid = match.Groups[1].Value;
mCookies = match.Groups[2].Value;

注意:(.*?)是万能表达式,灵活的使用可以为我们匹配数据的时候非常方便。

获取邮件列表

登录后进入主界面就可以看到邮件列表,那我们怎么通过代码将邮件列表信息取出来呢?

URL = "http://m37.mm.mail.163.com/xm/mailbox.do?sid={sid}&mCookie={mCookies}&wml=false&go=allMsgs&fid=1&keyfrom=allfolder"
Method = "GET"
Referer = "http://m37.mm.mail.163.com/xm/welcome.do?mCookie={mCookies}&passport=&keyfrom=auth.input&auth=1&user={username}%40163.com&wml=false×tamp=0®ister=0"

从返回的html里可以查看到固定邮件信息,接下来我们再用正则表达式将有用的信息提取出来。正则表达式如下:

<@div class=\"mailitem(.*?)\"><@div><@input type=\"checkbox\" name=\"mid\" value=\"(.*?)\" /><@strong>(.*?)(.*?)<@/span><@/strong><@/div><@div><@span class=\"title\">(.*?)href=\"/xm/message.do\\?sid=(.*?)\">(.*?)(.*?)<@/span><@/div><@/div>

注意:因为里面含有很多html标签,为了避免显示有问题,我将有些地方添加了@符号,自己使用的时候删除掉就ok了。

邮件标题 = Groups[7].Value;
邮件编号 = Groups[6].Value.Replace("amp","")
是新邮件 = Groups[3].Value.Contains("class=\"green\">新")

获取邮件内容

获取邮件内容就比较简单了,通过我们再上面获取的邮件编号,就可以访问到邮件详情页面啦。

URL = "http://m37.mm.mail.163.com/xm/message.do?sid={邮件编号}"
Referer = "http://m37.mm.mail.163.com/xm/mailbox.do?sid={sid}&mCookie={mCookies}&wml=false&go=allMsgs&fid=1&page=1&keyfrom=nav.top.read&isClear=1"

从返回的hmtl提取邮件正文,正文在mailcontent的div标签和ctrlBgBar的div标签之间。这里就自己匹配吧。为了邮件显示正常,我们可以把html的某些格式代码换成相应程序的:"<@br />"替换"\r\n"," "替换""。

写在最后

主要的三个接口都介绍完了,因为我做这个的时候只需要这3个,所以就没研究发邮件等其他的接口,下次有机会再捣鼓把。既然登录都搞定了,其他肯定都好办了吧。

当你不够强大的时候,任何的赞美都是嘲讽

文章评论(0)