From f2edb33399cc6d1c5955bfeb7b92a9938adcbd55 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Sat, 8 Oct 2011 11:40:32 +0200 Subject: add SMTP SSL support --- conf/jmc.conf | 1 + debian/changelog | 7 +++++++ debian/control | 2 +- setup.py | 11 +++++++---- src/jmc/model/account.py | 14 +++++++++++--- src/jmc/runner.py | 8 ++++++++ src/jmc/tests/jmc.conf | 1 + src/jmc/tests/runner.py | 22 ++++++++++++++++++---- 8 files changed, 54 insertions(+), 12 deletions(-) diff --git a/conf/jmc.conf b/conf/jmc.conf index fb309c9..1ce97ac 100644 --- a/conf/jmc.conf +++ b/conf/jmc.conf @@ -40,6 +40,7 @@ smtp_default_password: test smtp_default_host: testhost smtp_default_port: 25 smtp_default_tls: True +smtp_default_ssl: True smtp_default_label: Default SMTP Server enable_smtp_default_account: False diff --git a/debian/changelog b/debian/changelog index 28ad50c..d34c556 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +jmc (0.3rc2) unstable; urgency=low + + * JMC version 0.3 RC2 + * Add SMTP SSL support + + -- David Rousselie Sat, 08 Oct 2011 10:52:46 +0200 + jmc (0.3rc1) unstable; urgency=low * JMC version 0.3 RC1 diff --git a/debian/control b/debian/control index 8f3d72f..8ed7c49 100644 --- a/debian/control +++ b/debian/control @@ -7,7 +7,7 @@ Standards-Version: 3.8.4 Package: python-jmc Architecture: all -Depends: ${python:Depends}, python-jcl (= 0.1b3) +Depends: ${python:Depends}, python-jcl (>= 0.1rc1) Provides: ${python:Provides} Description: JMC is an email gateway for Jabber JMC is a jabber service to check email from POP3 and IMAP4 server and diff --git a/setup.py b/setup.py index 404123a..418b410 100644 --- a/setup.py +++ b/setup.py @@ -26,9 +26,11 @@ import sys import re import shutil import os +import platform prefix = "/usr" root = "/" +jmc_version = '0.3rc2' for arg in sys.argv: if arg[0:9] == "--prefix=": prefix = arg[9:] @@ -42,11 +44,11 @@ if prefix == "/usr": prefix_config_dir = "/etc/jabber/" else: prefix_config_dir = prefix + "/etc/jabber/" -config_dir = root + "/" + prefix_config_dir -full_prefix = root + "/" + prefix +config_dir = root + prefix_config_dir +full_prefix = root + prefix setup(name='jmc', - version='0.3b3', + version=jmc_version, description='Jabber Mail Component', long_description="""\ 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): os.makedirs(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) dest_runner_file_name = runner_file_name + ".tmp" dest_runner_file = open(dest_runner_file_name, "w") diff --git a/src/jmc/model/account.py b/src/jmc/model/account.py index 1c52c07..5a43df2 100644 --- a/src/jmc/model/account.py +++ b/src/jmc/model/account.py @@ -683,11 +683,12 @@ class AbstractSMTPAccount(Account): get_register_fields = classmethod(_get_register_fields) -smtp_default_login = '' -smtp_default_password = '' +smtp_default_login = None +smtp_default_password = None smtp_default_host = "localhost" smtp_default_port = 25 smtp_default_tls = False +smtp_default_ssl = False class GlobalSMTPAccount(AbstractSMTPAccount): """SMTP Account to send email with global settings""" @@ -696,6 +697,7 @@ class GlobalSMTPAccount(AbstractSMTPAccount): host = StringCol(default=lambda: smtp_default_host) port = IntCol(default=lambda: smtp_default_port) tls = BoolCol(default=lambda: smtp_default_tls) + ssl = BoolCol(default=lambda: smtp_default_ssl) store_password = BoolCol(default=True) waiting_password_reply = BoolCol(default=False) @@ -726,7 +728,10 @@ class GlobalSMTPAccount(AbstractSMTPAccount): """Send email according to current account parameters""" self.__logger.debug("Sending email:\n" + 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: smtp_connection.set_debuglevel(1) # It seems there is a bug that set self.port to something that is @@ -801,6 +806,9 @@ class SMTPAccount(GlobalSMTPAccount): ("tls", "boolean", None, account.boolean_post_func, 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, account.boolean_post_func, lambda bare_from_jid: True)] diff --git a/src/jmc/runner.py b/src/jmc/runner.py index e5ff225..16a5e8c 100644 --- a/src/jmc/runner.py +++ b/src/jmc/runner.py @@ -44,6 +44,7 @@ class JMCRunner(JCLRunner): self.smtp_default_host = None self.smtp_default_port = 0 self.smtp_default_tls = False + self.smtp_default_ssl = False self.smtp_default_label = None self.enable_smtp_default_account = False self.options += [("e:", "mail-default-encoding=", "jmc", @@ -69,6 +70,11 @@ class JMCRunner(JCLRunner): lambda arg: self.set_attr("smtp_default_tls", arg.lower() == "true" \ 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", " True/False\t\tEnable default SMTP connexion", lambda arg: self.set_attr("enable_smtp_default_account", @@ -107,6 +113,8 @@ class JMCRunner(JCLRunner): account.smtp_default_port = self.smtp_default_port if 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: Lang().get_default_lang_class().type_globalsmtp_name = \ self.smtp_default_label diff --git a/src/jmc/tests/jmc.conf b/src/jmc/tests/jmc.conf index ab46615..b6266ff 100644 --- a/src/jmc/tests/jmc.conf +++ b/src/jmc/tests/jmc.conf @@ -28,5 +28,6 @@ smtp_default_password: testpassword smtp_default_host: testhost smtp_default_port: 2525 smtp_default_tls: True +smtp_default_ssl: True smtp_default_label: SMTP Server enable_smtp_default_account: True diff --git a/src/jmc/tests/runner.py b/src/jmc/tests/runner.py index a9eb541..ccd7639 100644 --- a/src/jmc/tests/runner.py +++ b/src/jmc/tests/runner.py @@ -48,6 +48,7 @@ class JMCRunner_TestCase(JCLTestCase): self.smtp_default_host = account.smtp_default_host self.smtp_default_port = account.smtp_default_port self.smtp_default_tls = account.smtp_default_tls + self.smtp_default_ssl = account.smtp_default_ssl self.mail_default_encoding = MailAccount.default_encoding 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_port = self.smtp_default_port account.smtp_default_tls = self.smtp_default_tls + account.smtp_default_ssl = self.smtp_default_ssl MailAccount.default_encoding = self.mail_default_encoding 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_port, 0) 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.smtp_default_label, None) self.runner.setup_smtp_default() @@ -88,11 +91,12 @@ class JMCRunner_TestCase(JCLTestCase): _account = GlobalSMTPAccount(user=User(jid="user1@test.com"), name="account1", jid="account1@jmc.test.com") - self.assertEquals(_account.login, '') - self.assertEquals(_account.password, '') + self.assertEquals(_account.login, None) + self.assertEquals(_account.password, None) self.assertEquals(_account.host, 'localhost') self.assertEquals(_account.port, 25) self.assertEquals(_account.tls, False) + self.assertEquals(_account.ssl, False) def test_configure_configfile(self): 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_port, 2525) 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.smtp_default_label, "SMTP Server") self.runner.setup_smtp_default() @@ -124,6 +129,7 @@ class JMCRunner_TestCase(JCLTestCase): self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.port, 2525) self.assertEquals(_account.tls, True) + self.assertEquals(_account.ssl, True) def test_configure_uncomplete_configfile(self): 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_port, 0) 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.smtp_default_label, None) self.runner.setup_smtp_default() @@ -150,11 +157,12 @@ class JMCRunner_TestCase(JCLTestCase): _account = GlobalSMTPAccount(user=User(jid="user1@test.com"), name="account1", jid="account1@jmc.test.com") - self.assertEquals(_account.login, '') - self.assertEquals(_account.password, '') + self.assertEquals(_account.login, None) + self.assertEquals(_account.password, None) self.assertEquals(_account.host, 'localhost') self.assertEquals(_account.port, 25) self.assertEquals(_account.tls, False) + self.assertEquals(_account.ssl, False) def test_configure_commandline_shortopt(self): sys.argv = ["", "-c", "src/jmc/tests/jmc.conf", @@ -171,6 +179,7 @@ class JMCRunner_TestCase(JCLTestCase): "-t", "testhost", "-r", "2525", "-m", "True", + "-a", "True", "-n", "True", "-b", "My Global SMTP server"] 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_port, 2525) 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.smtp_default_label, "My Global SMTP server") self.runner.setup_smtp_default() @@ -201,6 +211,7 @@ class JMCRunner_TestCase(JCLTestCase): self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.port, 2525) self.assertEquals(_account.tls, True) + self.assertEquals(_account.ssl, True) def test_configure_commandline_longopt(self): sys.argv = ["", "--config-file", "src/jmc/tests/jmc.conf", @@ -217,6 +228,7 @@ class JMCRunner_TestCase(JCLTestCase): "--smtp-default-host", "testhost", "--smtp-default-port", "2525", "--smtp-default-tls", "True", + "--smtp-default-ssl", "True", "--enable-smtp-default-account", "True", "--smtp-default-label", "My Global SMTP server"] 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_port, 2525) 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.smtp_default_label, "My Global SMTP server") self.runner.setup_smtp_default() @@ -247,6 +260,7 @@ class JMCRunner_TestCase(JCLTestCase): self.assertEquals(_account.host, 'testhost') self.assertEquals(_account.port, 2525) self.assertEquals(_account.tls, True) + self.assertEquals(_account.ssl, True) def test__run(self): self.runner.pid_file = "/tmp/jmc.pid" -- cgit v1.2.3