add SMTP SSL support

This commit is contained in:
David Rousselie
2011-10-08 11:40:32 +02:00
parent 471e24394a
commit f2edb33399
8 changed files with 54 additions and 12 deletions

View File

@@ -40,6 +40,7 @@ smtp_default_password: test
smtp_default_host: testhost smtp_default_host: testhost
smtp_default_port: 25 smtp_default_port: 25
smtp_default_tls: True smtp_default_tls: True
smtp_default_ssl: True
smtp_default_label: Default SMTP Server smtp_default_label: Default SMTP Server
enable_smtp_default_account: False enable_smtp_default_account: False

7
debian/changelog vendored
View File

@@ -1,3 +1,10 @@
jmc (0.3rc2) unstable; urgency=low
* JMC version 0.3 RC2
* Add SMTP SSL support
-- David Rousselie <dax@happycoders.org> Sat, 08 Oct 2011 10:52:46 +0200
jmc (0.3rc1) unstable; urgency=low jmc (0.3rc1) unstable; urgency=low
* JMC version 0.3 RC1 * JMC version 0.3 RC1

2
debian/control vendored
View File

@@ -7,7 +7,7 @@ Standards-Version: 3.8.4
Package: python-jmc Package: python-jmc
Architecture: all Architecture: all
Depends: ${python:Depends}, python-jcl (= 0.1b3) Depends: ${python:Depends}, python-jcl (>= 0.1rc1)
Provides: ${python:Provides} Provides: ${python:Provides}
Description: JMC is an email gateway for Jabber Description: JMC is an email gateway for Jabber
JMC is a jabber service to check email from POP3 and IMAP4 server and JMC is a jabber service to check email from POP3 and IMAP4 server and

View File

@@ -26,9 +26,11 @@ import sys
import re import re
import shutil import shutil
import os import os
import platform
prefix = "/usr" prefix = "/usr"
root = "/" root = "/"
jmc_version = '0.3rc2'
for arg in sys.argv: for arg in sys.argv:
if arg[0:9] == "--prefix=": if arg[0:9] == "--prefix=":
prefix = arg[9:] prefix = arg[9:]
@@ -42,11 +44,11 @@ if prefix == "/usr":
prefix_config_dir = "/etc/jabber/" prefix_config_dir = "/etc/jabber/"
else: else:
prefix_config_dir = prefix + "/etc/jabber/" prefix_config_dir = prefix + "/etc/jabber/"
config_dir = root + "/" + prefix_config_dir config_dir = root + prefix_config_dir
full_prefix = root + "/" + prefix full_prefix = root + prefix
setup(name='jmc', setup(name='jmc',
version='0.3b3', version=jmc_version,
description='Jabber Mail Component', description='Jabber Mail Component',
long_description="""\ long_description="""\
JMC is a jabber service to check email from POP3 and IMAP4 server and retrieve JMC is a jabber service to check email from POP3 and IMAP4 server and retrieve
@@ -82,7 +84,8 @@ if len(sys.argv) >= 2 and sys.argv[1] == "install" \
if not os.path.exists(config_dir): if not os.path.exists(config_dir):
os.makedirs(config_dir) os.makedirs(config_dir)
shutil.copy("conf/jmc.conf", config_dir) shutil.copy("conf/jmc.conf", config_dir)
runner_file_name = full_prefix + "/lib/python2.6/site-packages/jmc/runner.py" python_version = ".".join(platform.python_version_tuple()[:2])
runner_file_name = full_prefix + "/lib/python" + python_version + "/site-packages/jmc-" + jmc_version + "-py" + python_version + ".egg/jmc/runner.py"
runner_file = open(runner_file_name) runner_file = open(runner_file_name)
dest_runner_file_name = runner_file_name + ".tmp" dest_runner_file_name = runner_file_name + ".tmp"
dest_runner_file = open(dest_runner_file_name, "w") dest_runner_file = open(dest_runner_file_name, "w")

View File

@@ -683,11 +683,12 @@ class AbstractSMTPAccount(Account):
get_register_fields = classmethod(_get_register_fields) get_register_fields = classmethod(_get_register_fields)
smtp_default_login = '' smtp_default_login = None
smtp_default_password = '' smtp_default_password = None
smtp_default_host = "localhost" smtp_default_host = "localhost"
smtp_default_port = 25 smtp_default_port = 25
smtp_default_tls = False smtp_default_tls = False
smtp_default_ssl = False
class GlobalSMTPAccount(AbstractSMTPAccount): class GlobalSMTPAccount(AbstractSMTPAccount):
"""SMTP Account to send email with global settings""" """SMTP Account to send email with global settings"""
@@ -696,6 +697,7 @@ class GlobalSMTPAccount(AbstractSMTPAccount):
host = StringCol(default=lambda: smtp_default_host) host = StringCol(default=lambda: smtp_default_host)
port = IntCol(default=lambda: smtp_default_port) port = IntCol(default=lambda: smtp_default_port)
tls = BoolCol(default=lambda: smtp_default_tls) tls = BoolCol(default=lambda: smtp_default_tls)
ssl = BoolCol(default=lambda: smtp_default_ssl)
store_password = BoolCol(default=True) store_password = BoolCol(default=True)
waiting_password_reply = BoolCol(default=False) waiting_password_reply = BoolCol(default=False)
@@ -726,7 +728,10 @@ class GlobalSMTPAccount(AbstractSMTPAccount):
"""Send email according to current account parameters""" """Send email according to current account parameters"""
self.__logger.debug("Sending email:\n" self.__logger.debug("Sending email:\n"
+ str(_email)) + str(_email))
smtp_connection = smtplib.SMTP() if self.ssl:
smtp_connection = smtplib.SMTP_SSL()
else:
smtp_connection = smtplib.SMTP()
if self.__logger.getEffectiveLevel() == logging.DEBUG: if self.__logger.getEffectiveLevel() == logging.DEBUG:
smtp_connection.set_debuglevel(1) smtp_connection.set_debuglevel(1)
# It seems there is a bug that set self.port to something that is # It seems there is a bug that set self.port to something that is
@@ -801,6 +806,9 @@ class SMTPAccount(GlobalSMTPAccount):
("tls", "boolean", None, ("tls", "boolean", None,
account.boolean_post_func, account.boolean_post_func,
lambda bare_from_jid: smtp_default_tls), lambda bare_from_jid: smtp_default_tls),
("ssl", "boolean", None,
account.boolean_post_func,
lambda bare_from_jid: smtp_default_ssl),
("store_password", "boolean", None, ("store_password", "boolean", None,
account.boolean_post_func, account.boolean_post_func,
lambda bare_from_jid: True)] lambda bare_from_jid: True)]

View File

@@ -44,6 +44,7 @@ class JMCRunner(JCLRunner):
self.smtp_default_host = None self.smtp_default_host = None
self.smtp_default_port = 0 self.smtp_default_port = 0
self.smtp_default_tls = False self.smtp_default_tls = False
self.smtp_default_ssl = False
self.smtp_default_label = None self.smtp_default_label = None
self.enable_smtp_default_account = False self.enable_smtp_default_account = False
self.options += [("e:", "mail-default-encoding=", "jmc", self.options += [("e:", "mail-default-encoding=", "jmc",
@@ -69,6 +70,11 @@ class JMCRunner(JCLRunner):
lambda arg: self.set_attr("smtp_default_tls", lambda arg: self.set_attr("smtp_default_tls",
arg.lower() == "true" \ arg.lower() == "true" \
or arg == "1")), or arg == "1")),
("a:", "smtp-default-ssl=", "smtp",
" True/False\t\tDefault SMTP SSL connexion",
lambda arg: self.set_attr("smtp_default_ssl",
arg.lower() == "true" \
or arg == "1")),
("n:", "enable-smtp-default-account=", "smtp", ("n:", "enable-smtp-default-account=", "smtp",
" True/False\t\tEnable default SMTP connexion", " True/False\t\tEnable default SMTP connexion",
lambda arg: self.set_attr("enable_smtp_default_account", lambda arg: self.set_attr("enable_smtp_default_account",
@@ -107,6 +113,8 @@ class JMCRunner(JCLRunner):
account.smtp_default_port = self.smtp_default_port account.smtp_default_port = self.smtp_default_port
if self.smtp_default_tls: if self.smtp_default_tls:
account.smtp_default_tls = self.smtp_default_tls account.smtp_default_tls = self.smtp_default_tls
if self.smtp_default_ssl:
account.smtp_default_ssl = self.smtp_default_ssl
if self.smtp_default_label: if self.smtp_default_label:
Lang().get_default_lang_class().type_globalsmtp_name = \ Lang().get_default_lang_class().type_globalsmtp_name = \
self.smtp_default_label self.smtp_default_label

View File

@@ -28,5 +28,6 @@ smtp_default_password: testpassword
smtp_default_host: testhost smtp_default_host: testhost
smtp_default_port: 2525 smtp_default_port: 2525
smtp_default_tls: True smtp_default_tls: True
smtp_default_ssl: True
smtp_default_label: SMTP Server smtp_default_label: SMTP Server
enable_smtp_default_account: True enable_smtp_default_account: True

View File

@@ -48,6 +48,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.smtp_default_host = account.smtp_default_host self.smtp_default_host = account.smtp_default_host
self.smtp_default_port = account.smtp_default_port self.smtp_default_port = account.smtp_default_port
self.smtp_default_tls = account.smtp_default_tls self.smtp_default_tls = account.smtp_default_tls
self.smtp_default_ssl = account.smtp_default_ssl
self.mail_default_encoding = MailAccount.default_encoding self.mail_default_encoding = MailAccount.default_encoding
self.type_globalsmtp_name = Lang.en.type_globalsmtp_name self.type_globalsmtp_name = Lang.en.type_globalsmtp_name
@@ -60,6 +61,7 @@ class JMCRunner_TestCase(JCLTestCase):
account.smtp_default_host = self.smtp_default_host account.smtp_default_host = self.smtp_default_host
account.smtp_default_port = self.smtp_default_port account.smtp_default_port = self.smtp_default_port
account.smtp_default_tls = self.smtp_default_tls account.smtp_default_tls = self.smtp_default_tls
account.smtp_default_ssl = self.smtp_default_ssl
MailAccount.default_encoding = self.mail_default_encoding MailAccount.default_encoding = self.mail_default_encoding
Lang.en.type_globalsmtp_name = self.type_globalsmtp_name Lang.en.type_globalsmtp_name = self.type_globalsmtp_name
@@ -80,6 +82,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(self.runner.smtp_default_host, None) self.assertEquals(self.runner.smtp_default_host, None)
self.assertEquals(self.runner.smtp_default_port, 0) self.assertEquals(self.runner.smtp_default_port, 0)
self.assertEquals(self.runner.smtp_default_tls, False) self.assertEquals(self.runner.smtp_default_tls, False)
self.assertEquals(self.runner.smtp_default_ssl, False)
self.assertEquals(self.runner.enable_smtp_default_account, False) self.assertEquals(self.runner.enable_smtp_default_account, False)
self.assertEquals(self.runner.smtp_default_label, None) self.assertEquals(self.runner.smtp_default_label, None)
self.runner.setup_smtp_default() self.runner.setup_smtp_default()
@@ -88,11 +91,12 @@ class JMCRunner_TestCase(JCLTestCase):
_account = GlobalSMTPAccount(user=User(jid="user1@test.com"), _account = GlobalSMTPAccount(user=User(jid="user1@test.com"),
name="account1", name="account1",
jid="account1@jmc.test.com") jid="account1@jmc.test.com")
self.assertEquals(_account.login, '') self.assertEquals(_account.login, None)
self.assertEquals(_account.password, '') self.assertEquals(_account.password, None)
self.assertEquals(_account.host, 'localhost') self.assertEquals(_account.host, 'localhost')
self.assertEquals(_account.port, 25) self.assertEquals(_account.port, 25)
self.assertEquals(_account.tls, False) self.assertEquals(_account.tls, False)
self.assertEquals(_account.ssl, False)
def test_configure_configfile(self): def test_configure_configfile(self):
self.runner.config_file = "src/jmc/tests/jmc.conf" self.runner.config_file = "src/jmc/tests/jmc.conf"
@@ -111,6 +115,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(self.runner.smtp_default_host, "testhost") self.assertEquals(self.runner.smtp_default_host, "testhost")
self.assertEquals(self.runner.smtp_default_port, 2525) self.assertEquals(self.runner.smtp_default_port, 2525)
self.assertEquals(self.runner.smtp_default_tls, True) self.assertEquals(self.runner.smtp_default_tls, True)
self.assertEquals(self.runner.smtp_default_ssl, True)
self.assertEquals(self.runner.enable_smtp_default_account, True) self.assertEquals(self.runner.enable_smtp_default_account, True)
self.assertEquals(self.runner.smtp_default_label, "SMTP Server") self.assertEquals(self.runner.smtp_default_label, "SMTP Server")
self.runner.setup_smtp_default() self.runner.setup_smtp_default()
@@ -124,6 +129,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.host, 'testhost')
self.assertEquals(_account.port, 2525) self.assertEquals(_account.port, 2525)
self.assertEquals(_account.tls, True) self.assertEquals(_account.tls, True)
self.assertEquals(_account.ssl, True)
def test_configure_uncomplete_configfile(self): def test_configure_uncomplete_configfile(self):
self.runner.config_file = "src/jmc/tests/uncomplete_jmc.conf" self.runner.config_file = "src/jmc/tests/uncomplete_jmc.conf"
@@ -142,6 +148,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(self.runner.smtp_default_host, None) self.assertEquals(self.runner.smtp_default_host, None)
self.assertEquals(self.runner.smtp_default_port, 0) self.assertEquals(self.runner.smtp_default_port, 0)
self.assertEquals(self.runner.smtp_default_tls, False) self.assertEquals(self.runner.smtp_default_tls, False)
self.assertEquals(self.runner.smtp_default_ssl, False)
self.assertEquals(self.runner.enable_smtp_default_account, False) self.assertEquals(self.runner.enable_smtp_default_account, False)
self.assertEquals(self.runner.smtp_default_label, None) self.assertEquals(self.runner.smtp_default_label, None)
self.runner.setup_smtp_default() self.runner.setup_smtp_default()
@@ -150,11 +157,12 @@ class JMCRunner_TestCase(JCLTestCase):
_account = GlobalSMTPAccount(user=User(jid="user1@test.com"), _account = GlobalSMTPAccount(user=User(jid="user1@test.com"),
name="account1", name="account1",
jid="account1@jmc.test.com") jid="account1@jmc.test.com")
self.assertEquals(_account.login, '') self.assertEquals(_account.login, None)
self.assertEquals(_account.password, '') self.assertEquals(_account.password, None)
self.assertEquals(_account.host, 'localhost') self.assertEquals(_account.host, 'localhost')
self.assertEquals(_account.port, 25) self.assertEquals(_account.port, 25)
self.assertEquals(_account.tls, False) self.assertEquals(_account.tls, False)
self.assertEquals(_account.ssl, False)
def test_configure_commandline_shortopt(self): def test_configure_commandline_shortopt(self):
sys.argv = ["", "-c", "src/jmc/tests/jmc.conf", sys.argv = ["", "-c", "src/jmc/tests/jmc.conf",
@@ -171,6 +179,7 @@ class JMCRunner_TestCase(JCLTestCase):
"-t", "testhost", "-t", "testhost",
"-r", "2525", "-r", "2525",
"-m", "True", "-m", "True",
"-a", "True",
"-n", "True", "-n", "True",
"-b", "My Global SMTP server"] "-b", "My Global SMTP server"]
self.runner.configure() self.runner.configure()
@@ -188,6 +197,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(self.runner.smtp_default_host, "testhost") self.assertEquals(self.runner.smtp_default_host, "testhost")
self.assertEquals(self.runner.smtp_default_port, 2525) self.assertEquals(self.runner.smtp_default_port, 2525)
self.assertEquals(self.runner.smtp_default_tls, True) self.assertEquals(self.runner.smtp_default_tls, True)
self.assertEquals(self.runner.smtp_default_ssl, True)
self.assertEquals(self.runner.enable_smtp_default_account, True) self.assertEquals(self.runner.enable_smtp_default_account, True)
self.assertEquals(self.runner.smtp_default_label, "My Global SMTP server") self.assertEquals(self.runner.smtp_default_label, "My Global SMTP server")
self.runner.setup_smtp_default() self.runner.setup_smtp_default()
@@ -201,6 +211,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.host, 'testhost')
self.assertEquals(_account.port, 2525) self.assertEquals(_account.port, 2525)
self.assertEquals(_account.tls, True) self.assertEquals(_account.tls, True)
self.assertEquals(_account.ssl, True)
def test_configure_commandline_longopt(self): def test_configure_commandline_longopt(self):
sys.argv = ["", "--config-file", "src/jmc/tests/jmc.conf", sys.argv = ["", "--config-file", "src/jmc/tests/jmc.conf",
@@ -217,6 +228,7 @@ class JMCRunner_TestCase(JCLTestCase):
"--smtp-default-host", "testhost", "--smtp-default-host", "testhost",
"--smtp-default-port", "2525", "--smtp-default-port", "2525",
"--smtp-default-tls", "True", "--smtp-default-tls", "True",
"--smtp-default-ssl", "True",
"--enable-smtp-default-account", "True", "--enable-smtp-default-account", "True",
"--smtp-default-label", "My Global SMTP server"] "--smtp-default-label", "My Global SMTP server"]
self.runner.configure() self.runner.configure()
@@ -234,6 +246,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(self.runner.smtp_default_host, "testhost") self.assertEquals(self.runner.smtp_default_host, "testhost")
self.assertEquals(self.runner.smtp_default_port, 2525) self.assertEquals(self.runner.smtp_default_port, 2525)
self.assertEquals(self.runner.smtp_default_tls, True) self.assertEquals(self.runner.smtp_default_tls, True)
self.assertEquals(self.runner.smtp_default_ssl, True)
self.assertEquals(self.runner.enable_smtp_default_account, True) self.assertEquals(self.runner.enable_smtp_default_account, True)
self.assertEquals(self.runner.smtp_default_label, "My Global SMTP server") self.assertEquals(self.runner.smtp_default_label, "My Global SMTP server")
self.runner.setup_smtp_default() self.runner.setup_smtp_default()
@@ -247,6 +260,7 @@ class JMCRunner_TestCase(JCLTestCase):
self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.host, 'testhost')
self.assertEquals(_account.port, 2525) self.assertEquals(_account.port, 2525)
self.assertEquals(_account.tls, True) self.assertEquals(_account.tls, True)
self.assertEquals(_account.ssl, True)
def test__run(self): def test__run(self):
self.runner.pid_file = "/tmp/jmc.pid" self.runner.pid_file = "/tmp/jmc.pid"