登录网址: https://account.mail.ru/login

***********************注:本文仅作学习交流,如有侵权,请私信删除。

1. 访问登录页面: 获取cookie值

    private bool GetIndex(){string url = "https://account.mail.ru/login";HttpClient client = new HttpClient();HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("user-agent", UserAgent);HttpResponseMessage response = client.SendAsync(request).Result;if (!response.IsSuccessStatusCode){Msg = "网络错误";return false;}List<string> setCookie = response.Headers.GetValues("set-cookie").ToList();cookies = ToolData.getCookies(setCookie);actToken = ToolData.getCookieValue(setCookie, "act");return true;}

2. 输入账号: 验证账号是否存在

        private bool InputAccount(){string url = "https://auth.mail.ru/api/v1/pushauth/info";HttpClient client = new HttpClient();HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);request.Headers.Add("accept", "*/*");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "auth.mail.ru");request.Headers.Add("Origin", "https://account.mail.ru");request.Headers.Add("Referer", "https://account.mail.ru/login");request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);string data = $"email={HttpUtility.UrlEncode(email)}&utm=&htmlencode=false&login={HttpUtility.UrlEncode(email)}";request.Content = new StringContent(data);request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");request.Content.Headers.ContentLength = data.Length;HttpResponseMessage response = client.SendAsync(request).Result;if (response.IsSuccessStatusCode){string content = response.Content.ReadAsStringAsync().Result;JObject json = JObject.Parse(content);if (Convert.ToBoolean(json.SelectToken("body.exists"))){return InputPwd();}}Msg = "该账号不存在";return false;}

3. 输入账号和密码: 确认账号和密码是否正确

        private bool InputPwd(){string url = "https://auth.mail.ru/cgi-bin/auth";HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false, AllowAutoRedirect = false });HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "auth.mail.ru");request.Headers.Add("Origin", "https://account.mail.ru");request.Headers.Add("Referer", "https://account.mail.ru/login");request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);string data = $"Login={HttpUtility.UrlEncode(email)}&Password={HttpUtility.UrlEncode(password)}&saveauth=1&new_auth_form=1&FromAccount=opener%3Daccount%26twoSteps%3D1&act_token={actToken}&page=https%3A%2F%2Fe.mail.ru%2Fmessages%2Finbox%3Fauthid%3Dk2aksknq.t1%26back%3D1%26dwhsplit%3Ds3319.n1s%26from%3Daccount&back=1&lang=ru_RU";request.Content = new StringContent(data);request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");request.Content.Headers.ContentLength = data.Length;HttpResponseMessage response = client.SendAsync(request).Result;if (response.StatusCode == HttpStatusCode.Redirect){if (response.Headers.TryGetValues("set-cookie", out var setCookies)){cookies = ToolData.UpdateCookie(cookies, setCookies.ToList());Uri location = response.Headers.Location;return Redirect(location);}}Msg = "邮箱密码错误";return false;}

4. 第三步登录成功, 会进行重定向, 需要禁止重定向

        private bool Redirect(Uri location){//Debug.WriteLine("Redirect start... ");using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false, AllowAutoRedirect = false })){HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, location.AbsoluteUri);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "e.mail.ru");request.Headers.Add("Referer", refere);request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);HttpResponseMessage response = client.SendAsync(request).Result;if (response.StatusCode == HttpStatusCode.Redirect){Uri locationUrl = response.Headers.Location;return Redirect1(locationUrl);}}Msg = "登录跳转1失败";return false;}private bool Redirect1(Uri location){using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false, AllowAutoRedirect = false })){HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, location.AbsoluteUri);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "auth.mail.ru");request.Headers.Add("Referer", refere);request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);HttpResponseMessage response = client.SendAsync(request).Result;if (response.StatusCode == HttpStatusCode.Redirect){if (response.Headers.TryGetValues("set-cookie", out var setCookies)){cookies = ToolData.UpdateCookie(cookies, setCookies.ToList());Uri locationUrl = response.Headers.Location;return Redirect2(locationUrl);}}}Msg = "登录跳转2失败";return false;}private bool Redirect2(Uri location){using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false, AllowAutoRedirect = false })){HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, location.AbsoluteUri);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "e.mail.ru");request.Headers.Add("Referer", refere);request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);HttpResponseMessage response = client.SendAsync(request).Result;if (response.StatusCode == HttpStatusCode.Redirect){if (response.Headers.TryGetValues("set-cookie", out var setCookies)){cookies = ToolData.UpdateCookie(cookies, setCookies.ToList());Uri locationUrl = response.Headers.Location;return Redirect3(locationUrl);}}}Msg = "登录跳转3失败";return false;}private bool Redirect3(Uri location){using (HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false, AllowAutoRedirect = false })){HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, location.AbsoluteUri);request.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");request.Headers.Add("accept-encoding", "gzip, deflate, br");request.Headers.Add("accept-language", "zh-CN,zh;q=0.9");request.Headers.Add("Host", "e.mail.ru");request.Headers.Add("Referer", refere);request.Headers.Add("cookie", cookies);request.Headers.Add("user-agent", UserAgent);HttpResponseMessage response = client.SendAsync(request).Result;if (response.StatusCode == HttpStatusCode.OK){if (response.Headers.TryGetValues("set-cookie", out var setCookies)){cookies = ToolData.UpdateCookie(cookies, setCookies.ToList());return GetToken();}}}Msg = "登录跳转4失败";return false;}

5. 访问邮箱列表需要登录 token ,这一步进行获取 token 值

        private bool GetToken(){HttpWebRequest request = WebRequest.CreateHttp("https://e.mail.ru/messages/inbox?authid=k2but1oq.4d&back=1&from=login&back=1") as HttpWebRequest;request.Method = "GET";request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";request.Host = "e.mail.ru";request.Referer = "https://account.mail.ru/login";request.Headers.Add("cookie", cookies);request.UserAgent = UserAgent;HttpWebResponse response = request.GetResponse() as HttpWebResponse;if (response.StatusCode == HttpStatusCode.OK){using (StreamReader sr = new StreamReader(response.GetResponseStream())){string content = sr.ReadToEnd();string patter = @"patron.updateToken\(""([\w\W]+)""\); ";Regex re = new Regex(patter);token = re.Match(content).Groups[1].Value.Substring(0, re.Match(content).Groups[1].Value.IndexOf('"'));GetEmails();return true;}}Msg = "登录获取token失败";return false;}

6. 终于到了获取邮箱列表的时候了.收集邮箱, (本文不做收集处理)

    private bool GetEmails(){Random random = new Random();var r = random.NextDouble() + "" + random.Next(0, 9);string url = $"https://e.mail.ru/api/v1/threads/status/smart?ajax_call=1&x-email={HttpUtility.UrlEncode(email)}&tarball=e.mail.ru-f-delta-fmail-4701-shkinev-1571995944.tgz&tab-time={ToolData.GetTempSpan()}&o_ss=AQ%3D%3D.s&o_v=107&email={HttpUtility.UrlEncode(email)}&sort=%7B%22type%22%3A%22date%22%2C%22order%22%3A%22desc%22%7D&offset=0&limit=26&folder=0&htmlencoded=false&last_modified=-1&filters=%7B%7D&nolog=0&sortby=D&rnd={r}&api=1&token=" + token;HttpWebRequest request = WebRequest.CreateHttp(url) as HttpWebRequest;request.Method = "GET";request.Accept = "text/plain, */*; q=0.01";request.Host = "e.mail.ru";request.Referer = "https://e.mail.ru/messages/inbox?authid=k2ci1wkw.cqs&back=1&from=login&back=1";request.Headers.Add("cookie", cookies);request.UserAgent = UserAgent;HttpWebResponse response = request.GetResponse() as HttpWebResponse;if (response.StatusCode == HttpStatusCode.OK){using (StreamReader sr = new StreamReader(response.GetResponseStream())){string content = sr.ReadToEnd();JObject jobject = JObject.Parse(content);JArray jArray = jobject.SelectToken("body.threads") as JArray;foreach (var item in jArray){string subject = item.SelectToken("subject").ToString();string emailid = item.SelectToken("id").ToString();}}}Msg = "访问获取邮箱列表出错";return false;}

7. 最后一步. 拿着邮箱id访问邮箱内容

    private bool GetFileContent(){string url = $"https://e.mail.ru/api/v1/threads/thread?ajax_call=1&x-email={HttpUtility.UrlEncode(email)}&tarball=e.mail.ru-f-delta-fmail-4701-shkinev-1571995944.tgz&tab-time={ToolData.GetTempSpan()}o_ss=AQ%3D%3D.s&o_v=107&email={HttpUtility.UrlEncode(email)}&offset=0&limit=50&htmlencoded=false&id={HttpUtility.UrlEncode(emailid)}&cache=false&api=1&token=" + token;HttpWebRequest request = WebRequest.CreateHttp(url) as HttpWebRequest;request.Method = "GET";request.Accept = "text/plain, */*; q=0.01";request.Host = "e.mail.ru";request.Referer = $"https://e.mail.ru/thread/{emailid}/";request.Headers.Add("cookie", cookies);request.UserAgent = UserAgent;HttpWebResponse response = request.GetResponse() as HttpWebResponse;if (response.StatusCode == HttpStatusCode.OK){using (StreamReader sr = new StreamReader(response.GetResponseStream())){string content = sr.ReadToEnd();return true;}}Msg = "访问邮箱内容出错";return false;}

写在最后: 1. 本文不做中间网络数据的分析. 需要源代码的可以私聊我.

2. 博主欢迎大家转载本文, 但需要声明出处.

3. 访问国外网站需要***(你懂的).

俄罗斯邮箱Mail.ru的登录及获取邮箱内容(c#实现)相关推荐

  1. 腾讯企业邮箱API实现单点登录和获取企业未读邮件

    应公司要求在ERP平台的OA系统上显示企业邮箱的未读邮件数量,并且实现单点登录.也就是点击数字可以直接进入腾讯企业邮箱不用登录.既然用到这个API肯定大家也都有腾讯企业邮箱OpenApi协议v1.4文 ...

  2. 163邮箱手机版怎么登录?163vip邮箱可以微信收发邮件吗?

    你知道可以微信收发邮件的电子邮箱吗? 一键绑定随心邮微信公众号,收邮件速度不要太快~操作要比APP简单的多,最重要的是新邮件免费通过微信提醒,效率越来越高. 注册TOM VIP邮箱,随时随地在微信里收 ...

  3. 企业邮箱支持通过手机号登录邮箱

    统一登录页支持手机号验证码的方式登录邮箱帐号: 登录时须阅读<服务条款><隐私政策>,勾选"同意"表示您已阅读并同意继续使用网易邮箱服务: 默认登录方式为邮 ...

  4. 微软Live Mail包含重大Bug,可导致用户无法登录,我已经一个多月无法登录自己的邮箱了。...

    微软Live Mail包含重大Bug,可导致用户无法登录,我已经一个多月无法登录自己的邮箱了. 我是微软Live Mail 的试用用户,自从上个月十几号开始,我的邮箱就无法登陆了. 当时的错误信息是: ...

  5. java mail实现smtp登录验证

    官网API没有实例,研究了好一会才试出来,希望能帮到大家 /*** 邮箱验证(smtp)* @param account 邮箱地址* @param password 密码* @return 验证结果* ...

  6. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能

    1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...

  7. 黑马瑞吉外卖之移动端验证码登录使用qq邮箱

    黑马瑞吉外卖之移动端验证码登录 说明 用qq邮箱进行验证码发送 hi,我是兰舟千帆,本次更文还是将瑞吉外卖的笔记完善一下.每一篇都写得很认真哦,希望需要的人可以得到帮助,谢谢你们的阅读. 说明 pc端 ...

  8. Java实现QQ邮箱登录,实现邮箱验证码三分钟失效,代码实现发送验证码和登录全过程思路。内附完整项目。

    温馨提示: 如果感觉本文章困难,请移步简单的邮箱验证,不涉及数据库和Redis,点击我进行跳转 使用技术: 1. MySQL数据库 2. Redis缓存(极其简单)点击此处学习 功能介绍: 发送验证码 ...

  9. Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)

    Python实现电子邮件发送 在生活中或许我们多数都在用微信或者是QQ,但是工作中就会涉及邮件了,我也是最近在工作中用到了,所以找了些资料,有的较为完备有的就特别零散,所以自己也来整理分享一下.这里主 ...

最新文章

  1. MPB:微生物所王军组-​人类肠道病毒粒子富集及纳米孔测序
  2. 三十而立,立的是什么?(r11笔记第70天)
  3. OpenStack 关于admin-openrc.sh的作用(Queens版本)
  4. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。
  5. 如何解决push commit conflict
  6. 学计算机还要写作文吗,第一次学电脑作文3篇
  7. 利用递归遍历文件夹和文件存入TreeView
  8. pythonjson中list操作_python中JSON的使用
  9. python核心编程之Python程序退出方式小结
  10. Delphi2010新手学习(1)
  11. ubuntu20.4安装gcc5.4
  12. 7月28日吃鸡端游服务器维护,绝地求生7月28日维护到什么时候结束
  13. 谱尼软件测试谱尼为网络安全护航
  14. mongodb副本集集群中节点出现recovering状态解决办法
  15. 立创eda学习笔记二:画pcb板流程(极简入门版)
  16. 宽480高640证件照是几寸?我只推荐这个方法
  17. 了解贝尔曼·福特算法
  18. Frame、Iframe、Frameset 的区别
  19. 修改数据库表的某一字段长度
  20. 挑选出100瓶药水中有且仅有1瓶毒药水所需的最少老鼠数量

热门文章

  1. 小白看了直呼细节--CPP“引用”
  2. 3d最新网络游戏捕鱼3d
  3. 安卓中PullToRefresh添加头布局的方法
  4. java学习笔记(十)—— 抽象类、接口、内部类
  5. 遭遇职场官斗,外派回来岗位被占!
  6. vue3+ts+element-plus(包含vuex、router) 随笔
  7. notepad++怎么解决光标变成下划线的问题?
  8. python warning ignore
  9. 查看邮箱帐号属性与说明
  10. requests使用socks代理