예제 #1
0
    def __init__(self, host, port=None, ssl=True, use_uid=True, stream=False, silent_fail=False):  # pylint: disable=R0913
        """
        Initialisation and setup connection to IMAPClient.

        Arguments:
            host (str): address of host
            port (int): port to connect to
            ssl (boolean): True if ssl should be used
            use_uid (boolean): If True unique message UIDs be used for all calls
                that accept message ids (defaults to True).
            stream (boolean):  If True then *host* is used as the command to run
                to establish a connection to the IMAP server (defaults to False).
                This is useful for exotic connection or authentication setups.

        Raises:
            IMAPConnectionError: raised when connection cannot be established.
        """
        try:
            self.client = IMAPClient(host, port, use_uid, ssl, stream)
            self.client.normalise_times = False
        except (error, gaierror) as e:
            # Could not connect to IMAPClient.
            self.client = None
            logger.warn(e)
            if not silent_fail:
                raise IMAPConnectionError(str(e))
 def _login(self):
     try:
         self.logger.debug("尝试登录邮箱")
         self.client = IMAPClient(HOST, PORT)
         loginInfo = self.client.login(self.USERNAME, self.PASSWORD)
         self.logger.debug("loginInfo: {0}".format(loginInfo))
         self.logger.debug("邮箱登录成功")
         self.isLogin = True
     except Exception as e:
         self.isLogin = False
         self.logger.error("邮箱登录失败: " + str(e))
예제 #3
0
    def test_SSL(self):
        self.imaplib.IMAP4_SSL.return_value = sentinel.IMAP4_SSL

        imap = IMAPClient('1.2.3.4', ssl=True)

        self.assertEqual(imap._imap, sentinel.IMAP4_SSL)
        self.imaplib.IMAP4_SSL.assert_called_with('1.2.3.4', 993)
        self.assertEqual(imap.host, '1.2.3.4')
        self.assertEqual(imap.port, 993)
        self.assertEqual(imap.ssl, True)
        self.assertEqual(imap.stream, False)
예제 #4
0
    def test_plain(self):
        self.imaplib.IMAP4.return_value = sentinel.IMAP4

        imap = IMAPClient('1.2.3.4')

        self.assertEqual(imap._imap, sentinel.IMAP4)
        self.imaplib.IMAP4.assert_called_with('1.2.3.4', 143)
        self.assertEqual(imap.host, '1.2.3.4')
        self.assertEqual(imap.port, 143)
        self.assertEqual(imap.ssl, False)
        self.assertEqual(imap.stream, False)
    def test_stream(self):
        self.imaplib.IMAP4_stream.return_value = sentinel.IMAP4_stream

        imap = IMAPClient('command', stream=True)

        self.assertEqual(imap._imap, sentinel.IMAP4_stream)
        self.imaplib.IMAP4_stream.assert_called_with('command')

        self.assertEqual(imap.host, 'command')
        self.assertEqual(imap.port, None)
        self.assertEqual(imap.ssl, False)
        self.assertEqual(imap.stream, True)
예제 #6
0
    def test_SSL_kwargs(self):
        self.imaplib.IMAP4_SSL.return_value = sentinel.IMAP4_SSL

        imap = IMAPClient('1.2.3.4',
                          ssl=True,
                          keyfile='key.pem',
                          certfile='cert.pem')

        self.assertEqual(imap._imap, sentinel.IMAP4_SSL)
        self.imaplib.IMAP4_SSL.assert_called_with('1.2.3.4',
                                                  993,
                                                  keyfile='key.pem',
                                                  certfile='cert.pem')
        self.assertEqual(imap.ssl, True)
        self.assertEqual(imap.stream, False)

        imap = IMAPClient('1.2.3.4', ssl=True, ssl_context=sentinel.context)
        self.imaplib.IMAP4_SSL.assert_called_with('1.2.3.4',
                                                  993,
                                                  ssl_context=sentinel.context)
        self.assertEqual(imap.ssl, True)
        self.assertEqual(imap.stream, False)
예제 #7
0
    def test_plain(self):
        fakeIMAP4 = Mock()
        self.imap4.IMAP4WithTimeout.return_value = fakeIMAP4

        imap = IMAPClient('1.2.3.4', ssl=False, timeout=sentinel.timeout)

        self.assertEqual(imap._imap, fakeIMAP4)
        self.imap4.IMAP4WithTimeout.assert_called_with(
            '1.2.3.4', 143, SocketTimeout(sentinel.timeout, sentinel.timeout))
        self.assertEqual(imap.host, '1.2.3.4')
        self.assertEqual(imap.port, 143)
        self.assertEqual(imap.ssl, False)
        self.assertEqual(imap.ssl_context, None)
        self.assertEqual(imap.stream, False)
    def test_SSL(self):
        fakeIMAP4_TLS = Mock()
        self.tls.IMAP4_TLS.return_value = fakeIMAP4_TLS

        imap = IMAPClient('1.2.3.4', ssl=True, ssl_context=sentinel.context,
                          timeout=sentinel.timeout)

        self.assertEqual(imap._imap, fakeIMAP4_TLS)
        self.tls.IMAP4_TLS.assert_called_with(
            '1.2.3.4', 993,
            sentinel.context, sentinel.timeout)
        self.assertEqual(imap.host, '1.2.3.4')
        self.assertEqual(imap.port, 993)
        self.assertEqual(imap.ssl, True)
        self.assertEqual(imap.ssl_context, sentinel.context)
        self.assertEqual(imap.stream, False)
예제 #9
0
파일: idle.py 프로젝트: nfultz/setosa.vim
                    level=logging.INFO,
                    datefmt="%Y-%m-%d %H:%M:%S")

request_raw = sys.stdin.readline()
request = json.loads(request_raw.rstrip())
logging.info(
    {key: request[key]
     for key in request if key not in ["imap-passwd"]})

host = request["imap-host"]
port = request["imap-port"]
login = request["imap-login"]
passwd = request["imap-passwd"]
idle_timeout = request["idle-timeout"]

imap = IMAPClient(host, port)
imap.login(login, passwd)
imap.select_folder("INBOX")
imap.idle()


def notify_new_mail():
    title = "Iris"
    msg = "New mail available!"

    if sys.platform == "darwin":
        cmd = ["terminal-notifier", "-title", title, "-message", msg]
    else:
        cmd = ["notify-send", title, msg]

    logging.info("Notify: " + " ".join(cmd))
예제 #10
0
        for address in bulb_address_list:
            logger.info(colors)
            bulb = flux_led.WifiLedBulb(address)
            bulb.setRgb(colors, True, None)
    else:
        for address in bulb_address_list:
            logger.info(colors)
            bulb = flux_led.WifiLedBulb(address)
            bulb.setCustomPattern(colors, 100, "jump")


bulb_addresses = bulb_scan()
logger.info(bulb_addresses)
open_config()

server = IMAPClient(host)
server.login(user, password)
server.select_folder('INBOX')
server.idle()

while True:
    try:
        response = server.idle_check(timeout=15)
        if response:
            server.idle_done()
            text = pull_email()
            if text is not None:
                units = find_units(text[3])
                set_pattern(units, bulb_addresses)
    except Exception as e:
        logging.error(str(e))
예제 #11
0
파일: api.py 프로젝트: dtrckd/iris.vim
        for key in request if key not in ["imap-passwd", "smtp-passwd"]
    }))

    if request["type"] == "login":
        try:
            imap_host = request["imap-host"]
            imap_port = request["imap-port"]
            imap_login = request["imap-login"]
            imap_passwd = request["imap-passwd"]

            smtp_host = request["smtp-host"]
            smtp_port = request["smtp-port"]
            smtp_login = request["smtp-login"]
            smtp_passwd = request["smtp-passwd"]

            imap_client = IMAPClient(host=imap_host, port=imap_port)
            imap_client.login(imap_login, imap_passwd)
            PreventLogout()

            folders = list(
                map(lambda folder: folder[2], imap_client.list_folders()))
            response = dict(success=True, type="login", folders=folders)
        except Exception as error:
            response = dict(success=False, type="login", error=str(error))

    elif request["type"] == "fetch-emails":
        try:
            emails = get_emails(request["seq"], request["chunk-size"])
            response = dict(success=True, type="fetch-emails", emails=emails)
        except Exception as error:
            response = dict(success=False,
예제 #12
0
파일: server.py 프로젝트: dsynkd/iris.vim
    except:
        continue

    if request['type'] == 'login':
        try:
            _imap_host = request['imap-host']
            _imap_port = request['imap-port']
            _imap_user = request['imap-user']
            _imap_pass = request['imap-pass']

            _smtp_host = request['smtp-host']
            _smtp_port = request['smtp-port']
            _smtp_user = request['smtp-user']
            _smtp_pass = request['smtp-pass']

            _imap = IMAPClient(host=_imap_host, port=_imap_port)
            _imap.login(_imap_user, _imap_pass)

            folders = list(map(lambda folder: folder[2], _imap.list_folders()))

            response = dict(success=True, type='login', folders=folders)
        except Exception as error:
            response = dict(success=False, type='login', error=str(error))

    elif request['type'] == 'fetch-emails':
        try:
            emails = get_emails(request['seq'])
            response = dict(success=True, type='fetch-emails', emails=emails)
        except Exception as error:
            response = dict(success=False,
                            type='fetch-emails',