#! /usr/bin/env python # -*- coding: utf-8 -*- # popt -- Simple command-line tool to test IMAP server # By: Benjamin RENARD # # Copyright (C) 2013 Easter-eggs # http://git.zionetrix.net/mailt # # This file is part of MailT. # # MailT is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published # by the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # MailT is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from optparse import OptionParser import os import poplib import getpass import logging import sys parser = OptionParser() parser.add_option('-H', '--host', action="store", type="string", dest="host", help="The IMAP host", default="127.0.0.1") parser.add_option('-p', '--port', action="store", type="string", dest="port", help="The IMAP port", default=None) parser.add_option('-S', '--ssl', action="store_true", dest="ssl", help="IMAP Over SSL (IMAPS)", default=False) parser.add_option('-U', '--user', action="store", type="string", dest="user", help="User login", default=None) parser.add_option('-P', '--password', action="store", type="string", dest="password", help="User password", default=None) parser.add_option('-v', '--verbose', action="store_true", dest="verbose") parser.add_option('-d', '--debug', action="store_true", dest="debug") (options, args) = parser.parse_args() if options.verbose or options.debug: loglevel=logging.DEBUG else: loglevel=logging.INFO logging.basicConfig(level=loglevel,format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') if not options.user: logging.fatal('You must provide the user login') sys.exit(1) if not options.password: options.password=getpass.getpass() if options.port is None: if options.ssl: options.port=995 else: options.port=110 if options.ssl: logging.debug('Establish SSL connexion to server') try: server = poplib.POP3_SSL(options.host,options.port) logging.debug('Connected') except Exception, e: logging.critical("POP3 connection error : %s" % e) sys.exit(2) else: logging.debug("Establish connexion to server") try: server = poplib.POP3(options.host,options.port) logging.debug('Connected') except Exception, e: logging.critical("POP3 connection error : %s" % e) sys.exit(2) if options.debug: server.set_debuglevel(2) if options.user: try: logging.debug('Login into server as %s' % options.user) server.user(options.user) server.pass_(options.password) logging.debug('Logged') except Exception as e: logging.critical("POP3 Auth error : %s" % e) sys.exit(3) try: logging.debug("List mail") ret = server.list() if len(ret)>0: logging.info("OK : %s message(s) founded" % len(ret[1])) else: logging.error("List message return incorrected : %s" % ret) except Exception as e: logging.critical('Error listing message(s) : %s' % e) finally: server.quit()