Initial commit
This commit is contained in:
commit
bb969b9c9c
10 changed files with 509 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*~
|
||||
build
|
4
debian/.gitignore
vendored
Normal file
4
debian/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
mailt.*debhelper*
|
||||
mailt.substvars
|
||||
mailt
|
||||
files
|
6
debian/changelog
vendored
Normal file
6
debian/changelog
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
mailt (1.1-1) unstable; urgency=low
|
||||
|
||||
* Initial release
|
||||
|
||||
-- Benjamin Renard <brenard@easter-eggs.com> Wed, 10 Apr 2013 21:17:35 +0200
|
||||
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
7
|
12
debian/control
vendored
Normal file
12
debian/control
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
Source: mailt
|
||||
Priority: extra
|
||||
Section: net
|
||||
Maintainer: Benjamin Renard <brenard@easter-eggs.com>
|
||||
Build-Depends: debhelper (>= 7.0.50~), python-all-dev, python-support (>= 0.90.0~), python-setuptools
|
||||
Homepage: http://git.zionetrix.net/mailt
|
||||
Vcs-git: http://git.zionetrix.net/mailt
|
||||
|
||||
Package: mailt
|
||||
Architecture: all
|
||||
Depends: ${python:Depends}, ${misc:Depends}
|
||||
Description: Simple command-line tool to test SMTP/IMAP mail server
|
41
debian/copyright
vendored
Normal file
41
debian/copyright
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
This work was packaged for Debian by:
|
||||
|
||||
Benjamin Renard <brenard@easter-eggs.com> on Fri, 06 Apr 2012 18:22:16 +0200
|
||||
|
||||
It was downloaded from Git repository of project :
|
||||
|
||||
http://git.zionetrix.net/mailt
|
||||
|
||||
Upstream Author:
|
||||
|
||||
Benjamin Renard <brenard@easter-eggs.com>
|
||||
|
||||
Copyright:
|
||||
|
||||
Copyright (C) 2013 Benjamin Renard <brenard@easter-eggs.com>
|
||||
|
||||
License:
|
||||
|
||||
This program 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.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public license version 3.0
|
||||
can be found in "/usr/share/common-licenses/GPL-3".
|
||||
|
||||
The Debian packaging is:
|
||||
|
||||
Copyright (C) 2013 Benjamin Renard <brenard@easter-eggs.com>
|
||||
|
||||
and is licensed under the GNU General Public License version 3.0
|
||||
see "/usr/share/common-licenses/GPL-3".
|
5
debian/rules
vendored
Executable file
5
debian/rules
vendored
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/make -f
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
154
imapt
Executable file
154
imapt
Executable file
|
@ -0,0 +1,154 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# imapt -- Simple command-line tool to test IMAP server
|
||||
# By: Benjamin RENARD <brenard@easter-eggs.com>
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
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()
|
39
setup.py
Normal file
39
setup.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# MailT -- Simple command-line tool to test SMTP/IMAP mail server
|
||||
# By: Benjamin RENARD <brenard@easter-eggs.com>
|
||||
#
|
||||
# Copyright (C) 2011 Easter-eggs
|
||||
# http://git.zionetrix.net/pysmtpt
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import imp
|
||||
from distutils.core import setup
|
||||
|
||||
setup(
|
||||
name = "MailT",
|
||||
version = "1.1",
|
||||
license = "http://www.gnu.org/licenses/gpl.html",
|
||||
description = "MailT is a simple command-line tool to test SMTP/IMAP mail server.",
|
||||
author = "Benjamin Renard",
|
||||
author_email = "brenard@easter-eggs.com",
|
||||
url = "http://git.zionetrix.net/mailt",
|
||||
keywords = "command-line smtp imap tool test",
|
||||
scripts = ["smtpt","imapt"]
|
||||
)
|
245
smtpt
Executable file
245
smtpt
Executable file
|
@ -0,0 +1,245 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# smtpt -- Simple command-line tool to test SMTP server
|
||||
# By: Benjamin RENARD <brenard@easter-eggs.com>
|
||||
#
|
||||
# Copyright (C) 2011 Easter-eggs
|
||||
# http://git.zionetrix.net/pysmtpt
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
from optparse import OptionParser
|
||||
|
||||
import os
|
||||
import smtplib
|
||||
import email.utils
|
||||
from email.MIMEText import MIMEText
|
||||
from email.MIMEMultipart import MIMEMultipart
|
||||
from email.MIMEBase import MIMEBase
|
||||
from email import Encoders
|
||||
|
||||
import logging
|
||||
import sys
|
||||
|
||||
parser = OptionParser()
|
||||
|
||||
default_subject="Simple test message"
|
||||
|
||||
parser.add_option('-s',
|
||||
'--subject',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="subject",
|
||||
help="The subject",
|
||||
default=default_subject)
|
||||
|
||||
parser.add_option('-f',
|
||||
'--from',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="author",
|
||||
help="The sender email",
|
||||
default="author@example.com")
|
||||
|
||||
parser.add_option('-t',
|
||||
'--to',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="to",
|
||||
help="The recipient email",
|
||||
default="recipient@example.com")
|
||||
|
||||
parser.add_option('-c',
|
||||
'--content',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="content",
|
||||
help="The content",
|
||||
default="This is the body of the message.")
|
||||
|
||||
parser.add_option('-H',
|
||||
'--host',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="host",
|
||||
help="The SMTP host",
|
||||
default="127.0.0.1")
|
||||
|
||||
parser.add_option('-p',
|
||||
'--port',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="port",
|
||||
help="The SMTP port",
|
||||
default=None)
|
||||
|
||||
parser.add_option('-S',
|
||||
'--ssl',
|
||||
action="store_true",
|
||||
dest="ssl",
|
||||
help="SMTP Over SSL (SMTPS)",
|
||||
default=False)
|
||||
|
||||
parser.add_option('-T',
|
||||
'--starttls',
|
||||
action="store_true",
|
||||
dest="starttls",
|
||||
help="Use STARTTLS",
|
||||
default=False)
|
||||
|
||||
parser.add_option('-U',
|
||||
'--user',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="user",
|
||||
help="SMTP Auth - User login",
|
||||
default=None)
|
||||
|
||||
parser.add_option('-P',
|
||||
'--password',
|
||||
action="store",
|
||||
type="string",
|
||||
dest="password",
|
||||
help="SMTP Auth - User password",
|
||||
default=None)
|
||||
|
||||
parser.add_option('-a',
|
||||
'--attachement',
|
||||
action="append",
|
||||
type="string",
|
||||
dest="attach",
|
||||
help="The attachment(s) file(s) path",
|
||||
default=None)
|
||||
|
||||
parser.add_option('-d',
|
||||
'--debug',
|
||||
action="store_true",
|
||||
dest="debug")
|
||||
|
||||
parser.add_option('-v',
|
||||
'--verbose',
|
||||
action="store_true",
|
||||
dest="verbose")
|
||||
|
||||
parser.add_option('--spam',
|
||||
action="store_true",
|
||||
dest="spam")
|
||||
|
||||
parser.add_option('--virus',
|
||||
action="store_true",
|
||||
dest="virus")
|
||||
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if options.spam:
|
||||
if options.subject == default_subject:
|
||||
options.subject = "Test spam message"
|
||||
options.content="""This is the GTUBE, the
|
||||
Generic
|
||||
Test for
|
||||
Unsolicited
|
||||
Bulk
|
||||
Email
|
||||
|
||||
If your spam filter supports it, the GTUBE provides a test by which you
|
||||
can verify that the filter is installed correctly and is detecting incoming
|
||||
spam. You can send yourself a test mail containing the following string of
|
||||
characters (in upper case and with no white spaces and line breaks):
|
||||
|
||||
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
|
||||
|
||||
You should send this test mail from an account outside of your network."""
|
||||
elif options.virus:
|
||||
if options.subject == default_subject:
|
||||
options.subject = "Test virus message"
|
||||
options.content="""This is the EICAR standard antivirus test string :
|
||||
|
||||
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"""
|
||||
|
||||
if not options.port:
|
||||
if options.ssl:
|
||||
options.port=465
|
||||
else:
|
||||
options.port=25
|
||||
|
||||
if options.debug:
|
||||
loglevel=logging.DEBUG
|
||||
elif options.verbose:
|
||||
loglevel=logging.INFO
|
||||
else:
|
||||
loglevel=logging.WARNING
|
||||
|
||||
logging.basicConfig(level=loglevel,format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
|
||||
|
||||
# Create the message
|
||||
msg = MIMEMultipart()
|
||||
msg['To'] = email.utils.formataddr(('Recipient', options.to))
|
||||
logging.info("To : %s" % options.to)
|
||||
msg['From'] = email.utils.formataddr(('Author', options.author))
|
||||
logging.info("From : %s" % options.author)
|
||||
msg['Subject'] = options.subject
|
||||
logging.info("Subject : %s" % options.subject)
|
||||
|
||||
|
||||
msg.attach( MIMEText(options.content) )
|
||||
|
||||
if options.attach:
|
||||
for filepath in options.attach:
|
||||
logging.info("Attache file %s" % filepath)
|
||||
part = MIMEBase('application', "octet-stream")
|
||||
part.set_payload( open(filepath,"rb").read() )
|
||||
Encoders.encode_base64(part)
|
||||
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(filepath))
|
||||
msg.attach(part)
|
||||
|
||||
if options.ssl:
|
||||
logging.info("Establish SSL connexion to server")
|
||||
server = smtplib.SMTP_SSL(options.host,options.port)
|
||||
else:
|
||||
logging.info("Establish connexion to server")
|
||||
server = smtplib.SMTP(options.host,options.port)
|
||||
|
||||
if options.starttls:
|
||||
try:
|
||||
logging.info("Start TLS")
|
||||
server.starttls()
|
||||
except Exception as e:
|
||||
logging.critical('Error using STARTTLS : %s' % e)
|
||||
server.quit()
|
||||
sys.exit(2)
|
||||
|
||||
if options.debug:
|
||||
logging.info("Establish connexion to server")
|
||||
server.set_debuglevel(True)
|
||||
|
||||
if options.user:
|
||||
error = None
|
||||
try:
|
||||
server.login(options.user,options.password)
|
||||
except Exception as e:
|
||||
logging.critical("SMTP Auth error : %s" % error)
|
||||
server.quit()
|
||||
sys.exit(3)
|
||||
|
||||
try:
|
||||
logging.info("Sending email")
|
||||
server.sendmail(options.author, [options.to], msg.as_string())
|
||||
except Exception as e:
|
||||
logging.critical('Error sending email : %s' % e)
|
||||
finally:
|
||||
server.quit()
|
Loading…
Reference in a new issue