亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? libgmail.py

?? 一個用Python的gmail功能庫
?? PY
?? 第 1 頁 / 共 4 頁
字號:
#!/usr/bin/env python## libgmail -- Gmail access via Python### To get the version number of the available libgmail version.## Reminder: add date before next release. This attribute is also## used in the setup script.Version = '0.1.11' # (August 2008)# Original author: follower@rancidbacon.com# Maintainers: Waseem (wdaher@mit.edu) and Stas Z (stas@linux.isbeter.nl)## License: GPL 2.0## NOTE:#   You should ensure you are permitted to use this script before using it#   to access Google's Gmail servers.### Gmail Implementation Notes# ==========================## * Folders contain message threads, not individual messages. At present I#   do not know any way to list all messages without processing thread list.#LG_DEBUG=0from lgconstants import *import os,pprintimport reimport urllibimport urllib2import mimetypesimport typesimport mechanize as ClientCookiefrom cPickle import load, dumpfrom email.MIMEBase import MIMEBasefrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartGMAIL_URL_LOGIN = "https://www.google.com/accounts/ServiceLoginBoxAuth"GMAIL_URL_GMAIL = "https://mail.google.com/mail/?ui=1&"#  Set to any value to use proxy.PROXY_URL = None  # e.g. libgmail.PROXY_URL = 'myproxy.org:3128'# TODO: Get these on the fly?STANDARD_FOLDERS = [U_INBOX_SEARCH, U_STARRED_SEARCH,                    U_ALL_SEARCH, U_DRAFTS_SEARCH,                    U_SENT_SEARCH, U_SPAM_SEARCH]# Constants with names not from the Gmail Javascript:# TODO: Move to `lgconstants.py`?U_SAVEDRAFT_VIEW = "sd"D_DRAFTINFO = "di"# NOTE: All other DI_* field offsets seem to match the MI_* field offsetsDI_BODY = 19versionWarned = False # If the Javascript version is different have we                      # warned about it?RE_SPLIT_PAGE_CONTENT = re.compile("D\((.*?)\);", re.DOTALL)class GmailError(Exception):    '''    Exception thrown upon gmail-specific failures, in particular a    failure to log in and a failure to parse responses.    '''    passclass GmailSendError(Exception):    '''    Exception to throw if we are unable to send a message    '''    passdef _parsePage(pageContent):    """    Parse the supplied HTML page and extract useful information from    the embedded Javascript.        """    lines = pageContent.splitlines()    data = '\n'.join([x for x in lines if x and x[0] in ['D', ')', ',', ']']])    #data = data.replace(',,',',').replace(',,',',')    data = re.sub(r'("(?:[^\\"]|\\.)*")', r'u\1', data)    data = re.sub(',{2,}', ',', data)        result = []    try:        exec data in {'__builtins__': None}, {'D': lambda x: result.append(x)}    except SyntaxError,info:        print info        raise GmailError, 'Failed to parse data returned from gmail.'    items = result     itemsDict = {}    namesFoundTwice = []    for item in items:        name = item[0]        try:            parsedValue = item[1:]        except Exception:            parsedValue = ['']        if itemsDict.has_key(name):            # This handles the case where a name key is used more than            # once (e.g. mail items, mail body etc) and automatically            # places the values into list.            # TODO: Check this actually works properly, it's early... :-)                        if len(parsedValue) and type(parsedValue[0]) is types.ListType:                    for item in parsedValue:                        itemsDict[name].append(item)            else:                itemsDict[name].append(parsedValue)        else:            if len(parsedValue) and type(parsedValue[0]) is types.ListType:                    itemsDict[name] = []                    for item in parsedValue:                        itemsDict[name].append(item)            else:                itemsDict[name] = [parsedValue]    return itemsDictdef _splitBunches(infoItems):# Is this still needed ?? Stas    """    Utility to help make it easy to iterate over each item separately,    even if they were bunched on the page.    """    result= []    # TODO: Decide if this is the best approach.    for group in infoItems:        if type(group) == tuple:            result.extend(group)        else:            result.append(group)    return resultclass SmartRedirectHandler(ClientCookie.HTTPRedirectHandler):    def __init__(self, cookiejar):        self.cookiejar = cookiejar    def http_error_302(self, req, fp, code, msg, headers):        # The location redirect doesn't seem to change        # the hostname header appropriately, so we do        # by hand. (Is this a bug in urllib2?)        new_host = re.match(r'http[s]*://(.*?\.google\.com)',                            headers.getheader('Location'))        if new_host:            req.add_header("Host", new_host.groups()[0])        result = ClientCookie.HTTPRedirectHandler.http_error_302(            self, req, fp, code, msg, headers)                      return result           def _buildURL(**kwargs):    """    """    return "%s%s" % (URL_GMAIL, urllib.urlencode(kwargs))def _paramsToMime(params, filenames, files):    """    """    mimeMsg = MIMEMultipart("form-data")    for name, value in params.iteritems():        mimeItem = MIMEText(value)        mimeItem.add_header("Content-Disposition", "form-data", name=name)        # TODO: Handle this better...?        for hdr in ['Content-Type','MIME-Version','Content-Transfer-Encoding']:            del mimeItem[hdr]        mimeMsg.attach(mimeItem)    if filenames or files:        filenames = filenames or []        files = files or []        for idx, item in enumerate(filenames + files):            # TODO: This is messy, tidy it...            if isinstance(item, str):                # We assume it's a file path...                filename = item                contentType = mimetypes.guess_type(filename)[0]                payload = open(filename, "rb").read()            else:                # We assume it's an `email.Message.Message` instance...                # TODO: Make more use of the pre-encoded information?                filename = item.get_filename()                contentType = item.get_content_type()                payload = item.get_payload(decode=True)                            if not contentType:                contentType = "application/octet-stream"                            mimeItem = MIMEBase(*contentType.split("/"))            mimeItem.add_header("Content-Disposition", "form-data",                                name="file%s" % idx, filename=filename)            # TODO: Encode the payload?            mimeItem.set_payload(payload)            # TODO: Handle this better...?            for hdr in ['MIME-Version','Content-Transfer-Encoding']:                del mimeItem[hdr]            mimeMsg.attach(mimeItem)    del mimeMsg['MIME-Version']    return mimeMsgclass GmailLoginFailure(Exception):    """    Raised whenever the login process fails--could be wrong username/password,    or Gmail service error, for example.    Extract the error message like this:    try:        foobar     except GmailLoginFailure,e:        mesg = e.message# or        print e# uses the __str__    """    def __init__(self,message):        self.message = message    def __str__(self):        return repr(self.message)class GmailAccount:    """    """    def __init__(self, name = "", pw = "", state = None, domain = None):        global URL_LOGIN, URL_GMAIL        """        """        self.domain = domain        if self.domain:            URL_LOGIN = "https://www.google.com/a/" + self.domain + "/LoginAction2"            URL_GMAIL = "http://mail.google.com/a/" + self.domain + "/?ui=1&"        else:            URL_LOGIN = GMAIL_URL_LOGIN            URL_GMAIL = GMAIL_URL_GMAIL        if name and pw:            self.name = name            self._pw = pw            self._cookieJar = ClientCookie.LWPCookieJar()            opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(self._cookieJar))            ClientCookie.install_opener(opener)                        if PROXY_URL is not None:                import gmail_transport                self.opener = ClientCookie.build_opener(gmail_transport.ConnectHTTPHandler(proxy = PROXY_URL),                                  gmail_transport.ConnectHTTPSHandler(proxy = PROXY_URL),                                  SmartRedirectHandler(self._cookieJar))            else:                self.opener = ClientCookie.build_opener(                                ClientCookie.HTTPHandler(),                                ClientCookie.HTTPSHandler(),                                SmartRedirectHandler(self._cookieJar))        elif state:            # TODO: Check for stale state cookies?            self.name, self._cookieJar = state.state        else:            raise ValueError("GmailAccount must be instantiated with " \                             "either GmailSessionState object or name " \                             "and password.")        self._cachedQuotaInfo = None        self._cachedLabelNames = None            def login(self):        """        """        # TODO: Throw exception if we were instantiated with state?        if self.domain:            data = urllib.urlencode({'continue': URL_GMAIL,                                     'at'      : 'null',                                     'service' : 'mail',                                     'Email': self.name,                                     'Passwd': self._pw,                                     })        else:            data = urllib.urlencode({'continue': URL_GMAIL,                                     'Email': self.name,                                     'Passwd': self._pw,                                     })                                                   headers = {'Host': 'www.google.com',                   'User-Agent': 'Mozilla/5.0 (Compatible; libgmail-python)'}        req = ClientCookie.Request(URL_LOGIN, data=data, headers=headers)        pageData = self._retrievePage(req)                if not self.domain:        # The GV cookie no longer comes in this page for        # "Apps", so this bottom portion is unnecessary for it.            # This requests the page that provides the required "GV" cookie.            RE_PAGE_REDIRECT = 'CheckCookie\?continue=([^"\']+)'                     # TODO: Catch more failure exceptions here...?            try:                link = re.search(RE_PAGE_REDIRECT, pageData).group(1)                redirectURL = urllib2.unquote(link)                redirectURL = redirectURL.replace('\\x26', '&')                        except AttributeError:                raise GmailLoginFailure("Login failed. (Wrong username/password?)")            # We aren't concerned with the actual content of this page,            # just the cookie that is returned with it.            pageData = self._retrievePage(redirectURL)    def getCookie(self,cookiename):        # TODO: Is there a way to extract the value directly?        for index, cookie in enumerate(self._cookieJar):            if cookie.name == cookiename:                return cookie.value        return ""    def _retrievePage(self, urlOrRequest):        """        """        if self.opener is None:            raise "Cannot find urlopener"                # ClientCookieify it, if it hasn't been already        if not isinstance(urlOrRequest, urllib2.Request):            req = ClientCookie.Request(urlOrRequest)        else:            req = urlOrRequest        req.add_header('User-Agent',                       'Mozilla/5.0 (Compatible; libgmail-python)')                try:            resp = self.opener.open(req)        except urllib2.HTTPError,info:            print info            return None        pageData = resp.read()        # TODO: This, for some reason, is still necessary?        self._cookieJar.extract_cookies(resp, req)        # TODO: Enable logging of page data for debugging purposes?        return pageData    def _parsePage(self, urlOrRequest):        """        Retrieve & then parse the requested page content.                """        items = _parsePage(self._retrievePage(urlOrRequest))        # Automatically cache some things like quota usage.        # TODO: Cache more?        # TODO: Expire cached values?        # TODO: Do this better.        try:            self._cachedQuotaInfo = items[D_QUOTA]        except KeyError:            pass        #pprint.pprint(items)                try:            self._cachedLabelNames = [category[CT_NAME] for category in items[D_CATEGORIES][0]]        except KeyError:            pass                return items    def _parseSearchResult(self, searchType, start = 0, **kwargs):        """        """        params = {U_SEARCH: searchType,                  U_START: start,                  U_VIEW: U_THREADLIST_VIEW,                  }        params.update(kwargs)        return self._parsePage(_buildURL(**params))    def _parseThreadSearch(self, searchType, allPages = False, **kwargs):        """        Only works for thread-based results at present. # TODO: Change this?        """        start = 0        tot = 0        threadsInfo = []        # Option to get *all* threads if multiple pages are used.        while (start == 0) or (allPages and                               len(threadsInfo) < threadListSummary[TS_TOTAL]):                            items = self._parseSearchResult(searchType, start, **kwargs)                #TODO: Handle single & zero result case better? Does this work?

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频一区二区不卡| youjizz国产精品| 欧美高清视频一二三区| 亚洲成a人v欧美综合天堂下载| 欧美视频精品在线观看| 日本vs亚洲vs韩国一区三区 | 欧美日韩免费观看一区二区三区 | 日韩综合一区二区| 日韩一级片在线播放| 久久黄色级2电影| 国产日韩精品一区二区三区在线| 成人白浆超碰人人人人| 亚洲国产一区二区视频| 欧美一区二区视频在线观看2022| 国产主播一区二区| 综合亚洲深深色噜噜狠狠网站| 欧美视频第二页| 精一区二区三区| 综合久久综合久久| 日韩欧美区一区二| 99麻豆久久久国产精品免费| 一区二区三区.www| 久久日一线二线三线suv| 91亚洲男人天堂| 裸体健美xxxx欧美裸体表演| 国产精品黄色在线观看| 日韩一级片在线观看| 色综合天天性综合| 久久91精品久久久久久秒播| 中文字幕日韩一区| 精品美女在线观看| 91麻豆福利精品推荐| 另类小说视频一区二区| 亚洲色图另类专区| 26uuuu精品一区二区| 91黄视频在线| 成人美女在线观看| 麻豆一区二区在线| 亚洲高清在线精品| 中文字幕不卡的av| 精品国产凹凸成av人导航| 欧美无砖专区一中文字| 国产精品一级黄| 亚洲综合在线视频| 欧美韩国日本不卡| 欧美成人a∨高清免费观看| 欧美午夜精品久久久| www.亚洲激情.com| 国产乱一区二区| 久久爱另类一区二区小说| 亚洲一区在线观看视频| 自拍偷在线精品自拍偷无码专区| 久久久亚洲国产美女国产盗摄| 91精品国产综合久久蜜臀 | 日本午夜一本久久久综合| 亚洲欧洲成人av每日更新| 久久久久久电影| 久久综合久色欧美综合狠狠| 在线播放中文一区| 欧美日韩激情一区| 欧美视频日韩视频在线观看| 色综合久久久久综合| 99riav久久精品riav| jlzzjlzz亚洲女人18| 成人av在线电影| 国产成人av影院| 国产精品一区二区久久不卡| 久久99精品国产麻豆婷婷洗澡| 日韩二区三区在线观看| 天堂蜜桃一区二区三区| 亚洲国产日韩a在线播放性色| 亚洲欧美日韩国产中文在线| 亚洲欧洲国产专区| 亚洲欧美一区二区三区国产精品| 中文字幕一区二区三区不卡| 国产精品妹子av| 国产精品灌醉下药二区| 综合婷婷亚洲小说| 亚洲午夜一区二区三区| 午夜精品在线看| 日韩—二三区免费观看av| 日本女人一区二区三区| 久久99精品国产.久久久久| 国产真实乱对白精彩久久| 国产精品一区在线| 成人av在线影院| 欧美制服丝袜第一页| 欧美日韩另类一区| 精品久久久三级丝袜| 久久新电视剧免费观看| 国产蜜臀av在线一区二区三区| 国产精品国产自产拍高清av | 91精品欧美福利在线观看| 日韩视频免费观看高清完整版在线观看 | 成人av在线播放网站| 色婷婷综合久久久久中文| 欧美亚洲日本国产| 欧美一区二区三区系列电影| 精品国产3级a| 国产精品久久久久久久岛一牛影视 | 国产欧美日韩在线观看| 日韩美女啊v在线免费观看| 亚洲成人午夜电影| 久久国产人妖系列| 成人国产精品免费观看动漫| 欧美日韩综合在线免费观看| 精品日韩99亚洲| 一区二区三区在线观看网站| 日韩精品视频网站| 成人国产精品免费观看动漫| 欧美精品乱码久久久久久按摩| 精品精品欲导航| 亚洲欧美aⅴ...| 亚洲丰满少妇videoshd| 国产三级精品三级| 亚洲欧美视频一区| 久久噜噜亚洲综合| 日本韩国欧美在线| 91精品久久久久久蜜臀| 亚洲高清三级视频| 欧美日韩另类一区| 成人永久免费视频| 热久久国产精品| 亚洲国产乱码最新视频| 国产日本亚洲高清| 3751色影院一区二区三区| 成人性生交大片免费看中文 | 在线日韩av片| 成人短视频下载| 狠狠久久亚洲欧美| 日韩和欧美一区二区三区| 亚洲丝袜精品丝袜在线| 久久久99久久| 精品国产露脸精彩对白| 91精品欧美福利在线观看| 欧美最猛性xxxxx直播| 懂色av一区二区三区蜜臀| 久久99久久99小草精品免视看| 亚洲妇熟xx妇色黄| 亚洲欧美日韩在线| 国产精品福利影院| 国产精品无人区| 国产欧美精品在线观看| 亚洲精品在线观| www欧美成人18+| 久久久亚洲综合| 久久久久久一二三区| 精品福利二区三区| 久久人人超碰精品| 国产亚洲成年网址在线观看| 久久免费午夜影院| 日本一区二区成人在线| 中文av一区二区| 中文字幕永久在线不卡| 亚洲欧洲精品成人久久奇米网 | 99久久99久久综合| a级精品国产片在线观看| 99v久久综合狠狠综合久久| 91免费小视频| 欧美日韩中文字幕精品| 在线播放中文一区| 精品国一区二区三区| 国产夜色精品一区二区av| 亚洲国产精品国自产拍av| 国产精品三级在线观看| 成人免费在线视频| 亚洲小说春色综合另类电影| 日韩精品乱码免费| 国产综合一区二区| 99天天综合性| 欧美日本一区二区在线观看| 欧美一区二区福利视频| 久久久亚洲国产美女国产盗摄 | 亚洲综合在线第一页| 亚洲午夜电影网| 免费xxxx性欧美18vr| 国内精品国产三级国产a久久| 高清不卡一区二区在线| 99久久婷婷国产综合精品| 欧美日韩一区不卡| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲第一激情av| 精品在线播放免费| 91伊人久久大香线蕉| 欧美日韩精品是欧美日韩精品| 亚洲精品在线免费观看视频| 亚洲欧美成aⅴ人在线观看| 奇米影视一区二区三区| www.亚洲国产| 日韩精品影音先锋| 亚洲精品ww久久久久久p站| 麻豆精品精品国产自在97香蕉| 懂色av中文字幕一区二区三区 | 国产亚洲欧美在线| 亚洲图片欧美综合| 高清在线观看日韩| 亚洲精品一区二区三区蜜桃下载| 亚洲精品视频免费观看| 国产乱码精品1区2区3区| 欧美日韩www|