GmailExtract.cs
资源名称:GetFriend.rar [点击查看]
上传用户:asz878
上传日期:2020-04-01
资源大小:189k
文件大小:5k
源码类别:
WEB邮件程序
开发平台:
Visual C++
- /*
- * 作者:方宏俊
- * 日期:2008-10-23
- * 描述:获取 google 好友列表
- * 51aspx
- * * */
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Text;
- using Utilities.Web;
- namespace Fhz.Msn.OpenContactsNet
- {
- /// <summary>
- /// google 好友列表
- /// </summary>
- public class GmailExtract : IMailContactExtract
- {
- private const string ContinueUrl = "http://mail.google.com/mail?ui=html&zy=l";
- private const string ExportUrl = "https://mail.google.com/mail/contacts/data/export?exportType=ALL&groupToExport=&out=GMAIL_CSV";
- private const string LoginRefererUrl = "https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl<mpl=default<mplcache=2";
- private const string LoginUrl = "https://www.google.com/accounts/ServiceLoginAuth?service=mail";
- private const string UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 1.0.3705; .NET CLR 3.0.04506.30)";
- #region IMailContactExtract Members
- public bool Extract( NetworkCredential credential, out MailContactList list )
- {
- bool result = false;
- list = new MailContactList();
- try
- {
- CookieCollection cookies = new CookieCollection();
- // 准备登录表单数据
- HttpValueCollection loginFormValues = new HttpValueCollection();
- loginFormValues[ "ltmpl" ] = "default";
- loginFormValues[ "ltmplcache" ] = "2";
- loginFormValues[ "continue" ] = ContinueUrl;
- loginFormValues[ "service" ] = "mail";
- loginFormValues[ "rm" ] = "false";
- loginFormValues[ "hl" ] = "en";
- loginFormValues[ "Email" ] = credential.UserName;
- loginFormValues[ "Passwd" ] = credential.Password;
- loginFormValues[ "PersistentCookie" ] = "true";
- loginFormValues[ "rmShown" ] = "1";
- loginFormValues[ "null" ] = "Sign In";
- // 转换为字节
- byte[] loginPostData = Encoding.UTF8.GetBytes( loginFormValues.ToString( true ) );
- HttpWebRequest loginRequest = ( HttpWebRequest ) WebRequest.Create( LoginUrl );
- loginRequest.Method = "POST";
- loginRequest.UserAgent = UserAgent;
- loginRequest.Referer = LoginRefererUrl;
- loginRequest.ContentType = "application/x-www-form-urlencoded";
- loginRequest.ContentLength = loginPostData.Length;
- loginRequest.AllowAutoRedirect = false;
- // 创建的Cookie集
- loginRequest.CookieContainer = new CookieContainer();
- // 添加请求 post 数据
- Stream stream;
- using ( stream = loginRequest.GetRequestStream() )
- {
- stream.Write( loginPostData, 0, loginPostData.Length );
- }
- HttpWebResponse loginResponse = ( HttpWebResponse ) loginRequest.GetResponse();
- cookies.Add( loginResponse.Cookies );
- // 创建请求输出 Google CSV 页
- HttpWebRequest contactsRequest = ( HttpWebRequest ) WebRequest.Create( ExportUrl );
- contactsRequest.Method = "GET";
- contactsRequest.UserAgent = UserAgent;
- contactsRequest.Referer = loginResponse.ResponseUri.ToString();
- // 使用Cookie得到从登录页
- contactsRequest.CookieContainer = new CookieContainer();
- foreach ( Cookie cookie in cookies )
- {
- contactsRequest.CookieContainer.Add( cookie );
- }
- HttpWebResponse exportResponse = ( HttpWebResponse ) contactsRequest.GetResponse();
- // 读取数据流的反应
- string csvData;
- using ( Stream responseStream = exportResponse.GetResponseStream() )
- {
- using ( StreamReader streamRead = new StreamReader( responseStream ) )
- {
- csvData = streamRead.ReadToEnd();
- }
- }
- // 剖析 google csv
- string[] lines = csvData.Split( 'n' );
- foreach ( string line in lines )
- {
- string[] values = line.Split( ',' );
- if ( values.Length < 2 )
- {
- continue;
- }
- MailContact mailContact = new MailContact();
- mailContact.Email = values[ 1 ];
- mailContact.Name = values[ 0 ];
- list.Add( mailContact );
- }
- result = true;
- }
- catch
- {
- }
- return result;
- }
- #endregion
- }
- }