俄罗斯邮箱Mail.ru的登录及获取邮箱内容(c#实现)
生活随笔
收集整理的這篇文章主要介紹了
俄罗斯邮箱Mail.ru的登录及获取邮箱内容(c#实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
登錄網址:?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#实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据Email地址跳转到邮箱登录界面
- 下一篇: c# char unsigned_dll