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

俄罗斯邮箱Mail.ru的登录及获取邮箱内容(c#实现)
***********************注:本⽂仅作学习交流,如有侵权,请私信删除。
1. 访问登录页⾯: 获取cookie值
private bool GetIndex()
{
string url = "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 = Cookies(setCookie);
actToken = CookieValue(setCookie, "act");
return true;
}
2. 输⼊账号: 验证账号是否存在
private bool InputAccount()
{
string url = "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", "account.mail.ru");
request.Headers.Add("Referer", "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("ists")))
{
return InputPwd();
}
}
Msg = "该账号不存在";
return false;
}
3. 输⼊账号和密码: 确认账号和密码是否正确
private bool InputPwd()
{
string url = "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", "account.mail.ru");
request.Headers.Add("Referer", "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=            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(" ");
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("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 = "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 = $"e.mail.ru/api/v1/threads/status/smart?ajax_call=1&x-email={HttpUtility.UrlEncode
(email)}&tarball=e.&tab-time={ToolData.GetTempSpan()}&o_ss=A            HttpWebRequest request = WebRequest.CreateHttp(url) as HttpWebRequest;
request.Method = "GET";
request.Accept = "text/plain, */*; q=0.01";
request.Host = "e.mail.ru";
request.Referer = "e.mail.ru/messages/inbox?authid=k2ci1wkw.cqs&back=1&from=login&back=1";
request.Headers.Add("cookie", cookies);
request.UserAgent = UserAgent;
acceptlanguageHttpWebResponse 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 = $"e.mail.ru/api/v1/threads/thread?ajax_call=1&x-email={HttpUtility.UrlEncode(email)}&tarball=e.&tab-time={ToolData.GetTempSpan()}o_ss=AQ%3D            HttpWebRequest request = WebRequest.CreateHttp(url) as HttpWebRequest;
request.Method = "GET";
request.Accept = "text/plain, */*; q=0.01";
request.Host = "e.mail.ru";
request.Referer = $"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. 访问国外⽹站需要***(你懂的).

本文发布于:2024-09-22 04:18:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/370763.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:邮箱   需要   登录   访问   账号   获取
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议