Example #1
0
 def fake_login(*args):
     raise IMAP4_SSL.error()
Example #2
0
def run(config, db):
    #print "start of IS.run"
    #try:
    #print "useSSL",config.useSsl,"host",config.host
    if config.useSsl:
        server = IMAP4_SSL(config.host)
    else:
        server = IMAP4(config.host)
    response = server.login(config.username,
                            config.password)  #TODO catch authentication error
    #print(_("response to logging in: "), response)
    #print "server.list():",server.list() #prints list of folders

    response = server.select(config.folder)
    #print "response to selecting INBOX:",response
    if response[0] != "OK":
        print response[1]
        raise IMAP4_SSL.error(response[1])  #TODO: show error message

    neededMessages = []
    response, searchData = server.search(
        None, "SUBJECT", "PokerStars Tournament History Request")
    for messageNumber in searchData[0].split(" "):
        response, headerData = server.fetch(messageNumber,
                                            "(BODY[HEADER.FIELDS (SUBJECT)])")
        if response != "OK":
            raise error  #TODO: show error message
        neededMessages.append(("PS", messageNumber))

    print _("Found %s eMails to fetch") % (len(neededMessages))

    if (len(neededMessages) == 0):
        raise error  #TODO: show error message

    NIL = Literal("NIL").setParseAction(replaceWith(None))
    integer = Word(nums).setParseAction(lambda t: int(t[0]))
    quotedString.setParseAction(removeQuotes)
    content = (NIL | integer | Word(alphanums))

    email_bodies = []
    for i, messageData in enumerate(neededMessages, start=1):
        #print("Retrieving message %s" % i)

        # Obtain BODYSTRUCTURE call
        email_uid = messageData[1]
        response, bodystructure = server.fetch(email_uid, '(BODYSTRUCTURE)')
        if response != "OK":
            raise error  #TODO: show error message

        response, bodyData = server.fetch(email_uid, "(UID BODY[TEXT])")
        if response != "OK":
            raise error  #TODO: show error message
        if messageData[0] == "PS":
            splitted_bodystructure = string.split(str(bodystructure[0]), " ",
                                                  1)
            parsed_bodystructure = nestedExpr(
                content=content,
                ignoreExpr=quotedString).parseString(splitted_bodystructure[1])
            charset = parsed_bodystructure[0][1][2][1]
            content_transfer_encoding = parsed_bodystructure[0][1][5]
            if content_transfer_encoding == 'QUOTED-PRINTABLE':
                decoded_body = quopri.decodestring(
                    bodyData[0][1]).decode(charset)
            else:
                decoded_body = bodyData[0][1].decode(charset)
            email_bodies.append(decoded_body)
            #finally:
            #   try:
    server.close()
    # finally:
    #    pass
    server.logout()
    print _("Finished downloading emails.")

    errors = 0
    if len(email_bodies) > 0:
        errors = importSummaries(db, config, email_bodies, options=None)
    else:
        print _("No Tournament summaries found.")

    print(_("Errors:"), errors)