4b34a426ea79443d563d37dcf70184c135480729
bn8 Initial commit

bn8 authored 11 years ago

1) #! /usr/bin/env python
2) # -*- coding: utf-8 -*-
3) 
4) # imapt -- Simple command-line tool to test IMAP server
5) # By: Benjamin RENARD <brenard@easter-eggs.com>
6) #
7) # Copyright (C) 2013 Easter-eggs
Benjamin Renard Fixed project URL

Benjamin Renard authored 11 years ago

8) # http://git.zionetrix.net/mailt
bn8 Initial commit

bn8 authored 11 years ago

9) #
10) # This file is part of MailT.
11) #
12) # MailT is free software; you can redistribute it and/or modify
13) # it under the terms of the GNU General Public License as published
14) # by the Free Software Foundation, either version 3 of the License,
15) # or (at your option) any later version.
16) #
17) # MailT is distributed in the hope that it will be useful,
18) # but WITHOUT ANY WARRANTY; without even the implied warranty of
19) # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20) # GNU Affero General Public License for more details.
21) #
22) # You should have received a copy of the GNU General Public License
23) # along with this program.  If not, see <http://www.gnu.org/licenses/>.
24) 
25) from optparse import OptionParser
26) 
27) import os
28) import imaplib
29) 
30) import logging
31) import sys
32) 
33) parser = OptionParser()
34) 
35) 
36) parser.add_option('-H',
37)                   '--host',
38)                   action="store",
39)                   type="string",
40)                   dest="host",
41)                   help="The IMAP host",
42)                   default="127.0.0.1")
43) 
44) parser.add_option('-p',
45)                   '--port',
46)                   action="store",
47)                   type="string",
48)                   dest="port",
49)                   help="The IMAP port",
50)                   default=None)
51) 
52) parser.add_option('-S',
53)                   '--ssl',
54)                   action="store_true",
55)                   dest="ssl",
56)                   help="IMAP Over SSL (IMAPS)",
57)                   default=False)
58) 
59) parser.add_option('-U',
60)                   '--user',
61)                   action="store",
62)                   type="string",
63)                   dest="user",
64)                   help="User login",
65)                   default=None)
66) 
67) parser.add_option('-P',
68)                   '--password',
69)                   action="store",
70)                   type="string",
71)                   dest="password",
72)                   help="User password",
73)                   default=None)
74) 
75) parser.add_option('--md5',
76)                   action="store_true",
77)                   dest="md5",
78)                   help="Use CRAM-MD5 password for authentication",
79)                   default=False)
80) 
81) parser.add_option('-m',
82)                   '--mailbox',
83)                   action="store",
84)                   type="string",
85)                   dest="mailbox",
86)                   help="The mailbox directory to select",
87)                   default='INBOX')
88) 
89) parser.add_option('-v',
90)                   '--verbose',
91)                   action="store_true",
92)                   dest="verbose")
93) 
Benjamin Renard imapt : add -l/--list param...

Benjamin Renard authored 11 years ago

94) parser.add_option('-l',
95)                   '--list',
96)                   action="store_true",
97)                   dest="list",
98)                   help="List mailboxes",
99)                   default=False)
100) 
bn8 Initial commit

bn8 authored 11 years ago

101) (options, args) = parser.parse_args()
102) 
103) if options.verbose:
104) 	loglevel=logging.DEBUG
105) else:
106) 	loglevel=logging.INFO
107) 
108) logging.basicConfig(level=loglevel,format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
109) 
110) if not options.user or not options.password:
111) 	logging.fatal('You must provide the user login and password')
112) 	sys.exit(1)
113) 
114) if options.port is None:
115) 	if options.ssl:
116) 		options.port=993
117) 	else:
118) 		options.port=143
119) 
120) if options.ssl:
121) 	logging.debug('Establish SSL connexion to server')
122) 	try:
123) 		server = imaplib.IMAP4_SSL(options.host,options.port)
124) 		logging.debug('Connected')
125) 	except Exception, e:
126) 		logging.critical("IMAP connection error : %s" % e)
127) 		sys.exit(2)
128) else:
129) 	logging.debug("Establish connexion to server")
130) 	try:
131) 		server = imaplib.IMAP4(options.host,options.port)
132) 		logging.debug('Connected')
133) 	except Exception, e:
134) 		logging.critical("IMAP connection error : %s" % e)
135) 		sys.exit(2)
136) 
137) if options.user:
138) 	try:
139) 		if options.md5:
140) 			logging.debug('Login into server as %s (with CRAM-MD5 password)' % options.user)
141) 			server.login_cram_md5(options.user,options.password)
142) 		else:
143) 			logging.debug('Login into server as %s' % options.user)
144) 			server.login(options.user,options.password)
145) 		logging.debug('Logged')
146) 	except Exception as e:
147) 		logging.critical("IMAP Auth error : %s" % e)
148) 		sys.exit(3)
149) 		
150) try:
Benjamin Renard imapt : add -l/--list param...

Benjamin Renard authored 11 years ago

151) 	if options.list:
152) 		logging.info('List mailbox')
153) 		(status,l) = server.list()
154) 		for d in l:
155) 			logging.info('   "%s"' % d)
bn8 Initial commit

bn8 authored 11 years ago

156) 	else:
Benjamin Renard imapt : add -l/--list param...

Benjamin Renard authored 11 years ago

157) 		logging.debug("Select mailbox")
158) 		ret = server.select(options.mailbox)
159) 		if len(ret)>0 and ret[0]=='OK':
160) 			logging.info("Mailbox %s content %s message(s)" % (options.mailbox,ret[1][0]))
161) 		else:
162) 			logging.error("Selecting return incorrected : %s" % ret)
163) 		server.close()
bn8 Initial commit

bn8 authored 11 years ago

164) except Exception as e:
Benjamin Renard imapt : fixed typo bug

Benjamin Renard authored 11 years ago

165) 	logging.critical('Error selecting mailbox %s : %s' % (options.mailbox,e))