#! /usr/bin/env python # -*- coding: utf-8 -*- # imapt -- Simple command-line tool to test IMAP server # By: Benjamin RENARD # # Copyright (C) 2013 Easter-eggs # http://git.zionetrix.net/pyimapt # # 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 imaplib 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('--md5', action="store_true", dest="md5", help="Use CRAM-MD5 password for authentication", default=False) parser.add_option('-m', '--mailbox', action="store", type="string", dest="mailbox", help="The mailbox directory to select", default='INBOX') parser.add_option('-v', '--verbose', action="store_true", dest="verbose") (options, args) = parser.parse_args() if options.verbose: 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 or not options.password: logging.fatal('You must provide the user login and password') sys.exit(1) if options.port is None: if options.ssl: options.port=993 else: options.port=143 if options.ssl: logging.debug('Establish SSL connexion to server') try: server = imaplib.IMAP4_SSL(options.host,options.port) logging.debug('Connected') except Exception, e: logging.critical("IMAP connection error : %s" % e) sys.exit(2) else: logging.debug("Establish connexion to server") try: server = imaplib.IMAP4(options.host,options.port) logging.debug('Connected') except Exception, e: logging.critical("IMAP connection error : %s" % e) sys.exit(2) if options.user: try: if options.md5: logging.debug('Login into server as %s (with CRAM-MD5 password)' % options.user) server.login_cram_md5(options.user,options.password) else: logging.debug('Login into server as %s' % options.user) server.login(options.user,options.password) logging.debug('Logged') except Exception as e: logging.critical("IMAP Auth error : %s" % e) sys.exit(3) try: logging.debug("Select mailbox") ret = server.select(options.mailbox) if len(ret)>0 and ret[0]=='OK': logging.info("Mailbox %s content %s message(s)" % (options.mailbox,ret[1][0])) else: logging.error("Selecting return incorrected : %s" % ret) except Exception as e: logging.critical('Error selecting mailbox %s : %s' % (option.mailbox,e)) finally: server.close() server.logout()