SendMail handlers implementation
darcs-hash:20070529165121-86b55-277ef5d430a1480519abd96fa81cf175b6036a4c.gz
This commit is contained in:
@@ -59,10 +59,6 @@ class MailComponent(FeederComponent):
|
||||
self.feeder = MailFeeder(self)
|
||||
self.sender = MailSender(self)
|
||||
self.account_manager.account_classes = (IMAPAccount, POP3Account, SMTPAccount)
|
||||
|
||||
def authenticated(self):
|
||||
"""Register message handlers"""
|
||||
FeederComponent.authenticated(self)
|
||||
self.msg_handlers += [SendMailMessageHandler(), RootSendMailMessageHandler()]
|
||||
self.subscribe_handlers += [MailSubscribeHandler()]
|
||||
self.unsubscribe_handlers += [MailUnsubscribeHandler()]
|
||||
@@ -201,13 +197,22 @@ class SendMailMessageHandler(MailHandler):
|
||||
MailHandler.__init__(self)
|
||||
self.__logger = logging.getLogger("jmc.jabber.component.SendMailMessageHandler")
|
||||
|
||||
def send_mail_result(self, message, lang, to_email):
|
||||
return [Message(from_jid=message.get_to(),
|
||||
to_jid=message.get_from(),
|
||||
subject=lang.send_mail_ok_subject,
|
||||
body=lang.send_mail_ok_body % (to_email))]
|
||||
|
||||
def handle(self, message, lang, accounts):
|
||||
to_email = replace(message.get_to().node, '%', '@', 1)
|
||||
to_node = message.get_to().node
|
||||
to_email = to_node.replace('%', '@', 1)
|
||||
accounts[0].send_email(to_email, message.get_subject(), message.get_body())
|
||||
return self.send_mail_result(message, lang, to_email)
|
||||
|
||||
class RootSendMailMessageHandler(SendMailMessageHandler):
|
||||
def __init__(self):
|
||||
SendMailMessageHandler.__init__(self)
|
||||
self.to_regexp = re.compile("^\s*(to|TO)\s*:\s*(?P<to_email>.*)")
|
||||
self.__logger = logging.getLogger("jmc.jabber.component.RootSendMailMessageHandler")
|
||||
|
||||
def filter(self, message):
|
||||
@@ -221,9 +226,27 @@ class RootSendMailMessageHandler(SendMailMessageHandler):
|
||||
return accounts
|
||||
|
||||
def handle(self, message, lang, accounts):
|
||||
# TODO : parse "headers", or advanced addressing
|
||||
to_email = ""
|
||||
accounts[0].send_email(to_email, message.get_subject(), message.get_body())
|
||||
to_email = None
|
||||
lines = message.get_body().split('\n')
|
||||
message_body = []
|
||||
while to_email is None \
|
||||
and lines:
|
||||
line = lines.pop(0)
|
||||
match = self.to_regexp.match(line)
|
||||
if match:
|
||||
to_email = match.group("to_email")
|
||||
else:
|
||||
message_body.append(line)
|
||||
message_body.extend(lines)
|
||||
if to_email is not None:
|
||||
accounts[0].send_email(to_email, message.get_subject(), "".join(message_body))
|
||||
return self.send_mail_result(message, lang, to_email)
|
||||
else:
|
||||
return [Message(from_jid=message.get_to(),
|
||||
to_jid=message.get_from(),
|
||||
stanza_type="error",
|
||||
subject=lang.send_mail_error_no_to_header_subject,
|
||||
body=lang.send_mail_error_no_to_header_body)]
|
||||
|
||||
class MailSubscribeHandler(DefaultSubscribeHandler, MailHandler):
|
||||
"""Use DefaultSubscribeHandler handle method and MailHandler filter"""
|
||||
|
||||
@@ -37,7 +37,7 @@ from jcl.jabber.tests.component import DefaultSubscribeHandler_TestCase, Default
|
||||
|
||||
from jmc.model.account import MailAccount, IMAPAccount, POP3Account, SMTPAccount
|
||||
from jmc.jabber.component import MailComponent, SendMailMessageHandler, RootSendMailMessageHandler, MailHandler, MailSubscribeHandler, MailUnsubscribeHandler
|
||||
|
||||
from jmc.lang import Lang
|
||||
|
||||
if sys.platform == "win32":
|
||||
DB_PATH = "/c|/temp/jmc_test.db"
|
||||
@@ -515,8 +515,28 @@ class SendMailMessageHandler_TestCase(unittest.TestCase):
|
||||
self.handler = SendMailMessageHandler()
|
||||
|
||||
def test_handle(self):
|
||||
# TODO
|
||||
pass
|
||||
message = Message(from_jid="user1@test.com",
|
||||
to_jid="user%test.com@jcl.test.com",
|
||||
subject="message subject",
|
||||
body="message body")
|
||||
class MockSMTPAccount(object):
|
||||
def send_email(self, to_email, subject, body):
|
||||
self.to_email = to_email
|
||||
self.subject = subject
|
||||
self.body = body
|
||||
accounts = [MockSMTPAccount()]
|
||||
result = self.handler.handle(message, Lang.en, accounts)
|
||||
self.assertEquals(accounts[0].to_email, "user@test.com")
|
||||
self.assertEquals(accounts[0].subject, "message subject")
|
||||
self.assertEquals(accounts[0].body, "message body")
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].stanza_type, "message")
|
||||
self.assertEquals(result[0].get_from(), "user%test.com@jcl.test.com")
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_subject(),
|
||||
Lang.en.send_mail_ok_subject)
|
||||
self.assertEquals(result[0].get_body(),
|
||||
Lang.en.send_mail_ok_body % ("user@test.com"))
|
||||
|
||||
class RootSendMailMessageHandler_TestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@@ -586,6 +606,52 @@ class RootSendMailMessageHandler_TestCase(unittest.TestCase):
|
||||
self.assertEquals(accounts.count(), 0)
|
||||
del account.hub.threadConnection
|
||||
|
||||
def test_handle_email_found_in_header(self):
|
||||
message = Message(from_jid="user1@test.com",
|
||||
to_jid="jcl.test.com",
|
||||
subject="message subject",
|
||||
body="to: user@test.com\n" \
|
||||
"message body")
|
||||
class MockSMTPAccount(object):
|
||||
def send_email(self, to_email, subject, body):
|
||||
self.to_email = to_email
|
||||
self.subject = subject
|
||||
self.body = body
|
||||
accounts = [MockSMTPAccount()]
|
||||
result = self.handler.handle(message, Lang.en, accounts)
|
||||
self.assertEquals(accounts[0].to_email, "user@test.com")
|
||||
self.assertEquals(accounts[0].subject, "message subject")
|
||||
self.assertEquals(accounts[0].body, "message body")
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_type(), None)
|
||||
self.assertEquals(result[0].get_from(), "jcl.test.com")
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_subject(),
|
||||
Lang.en.send_mail_ok_subject)
|
||||
self.assertEquals(result[0].get_body(),
|
||||
Lang.en.send_mail_ok_body % ("user@test.com"))
|
||||
|
||||
def test_handle_email_not_found_in_header(self):
|
||||
message = Message(from_jid="user1@test.com",
|
||||
to_jid="jcl.test.com",
|
||||
subject="message subject",
|
||||
body="message body")
|
||||
class MockSMTPAccount(object):
|
||||
def send_email(self, to_email, subject, body):
|
||||
self.to_email = to_email
|
||||
self.subject = subject
|
||||
self.body = body
|
||||
accounts = [MockSMTPAccount()]
|
||||
result = self.handler.handle(message, Lang.en, accounts)
|
||||
self.assertEquals(len(result), 1)
|
||||
self.assertEquals(result[0].get_type(), "error")
|
||||
self.assertEquals(result[0].get_from(), "jcl.test.com")
|
||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||
self.assertEquals(result[0].get_subject(),
|
||||
Lang.en.send_mail_error_no_to_header_subject)
|
||||
self.assertEquals(result[0].get_body(),
|
||||
Lang.en.send_mail_error_no_to_header_body)
|
||||
|
||||
class MailHandler_TestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.handler = MailHandler()
|
||||
|
||||
@@ -61,6 +61,13 @@ class Lang(jcl.lang.Lang):
|
||||
type_imap_name = u"IMAP accounts"
|
||||
type_pop3_name = u"POP3 accounts"
|
||||
|
||||
send_mail_error_no_to_header_subject = u"No header \"TO\" found"
|
||||
send_mail_error_no_to_header_body = u"No header \"TO\" found in receive message.\n" \
|
||||
u"Please use following syntax to specify destination email address:\n" \
|
||||
u"TO: user@test.com\n"
|
||||
send_mail_ok_subject = u"Email sent"
|
||||
send_mail_ok_body = u"Your email was sent to %s."
|
||||
|
||||
class fr(jcl.lang.Lang.fr):
|
||||
component_name = u"Jabber Mail Component"
|
||||
register_title = u"Enregistrement d'une nouvelle connexion à un " \
|
||||
@@ -99,6 +106,15 @@ class Lang(jcl.lang.Lang):
|
||||
type_imap_name = u"comptes IMAP"
|
||||
type_pop3_name = u"comptes POP3"
|
||||
|
||||
send_mail_error_no_to_header_subject = u"L'en-tête \"TO\" n'a pas été "\
|
||||
u"trouvé"
|
||||
send_mail_error_no_to_header_body = u"L'en-tête \"TO\" n'a pas été " \
|
||||
u"trouvé dans le message envoyé.\n" \
|
||||
u"Utiliser la syntax suivante pour spécifier l'adresse email du " \
|
||||
u"destinataire :\nTO: user@test.com\n"
|
||||
send_mail_ok_subject = u"Email envoyé"
|
||||
send_mail_ok_body = u"Votre email a été envoyé à %s."
|
||||
|
||||
class nl(jcl.lang.Lang.nl):
|
||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
|
||||
register_title = u"Registratie van verbindingen voor Jabber Mail"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
##
|
||||
## test_lang.py
|
||||
## Login : David Rousselie <david.rousselie@happycoders.org>
|
||||
@@ -105,6 +105,13 @@ class Language_TestCase(jcl.tests.lang.Language_TestCase):
|
||||
self.assertNotEquals(self.lang_class.new_mail_subject, None)
|
||||
self.assertNotEquals(self.lang_class.new_digest_subject, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.send_mail_error_no_to_header_subject,
|
||||
None)
|
||||
self.assertNotEquals(self.lang_class.send_mail_error_no_to_header_body,
|
||||
None)
|
||||
self.assertNotEquals(self.lang_class.send_mail_ok_subject, None)
|
||||
self.assertNotEquals(self.lang_class.send_mail_ok_body, None)
|
||||
|
||||
class Language_fr_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.fr
|
||||
|
||||
Reference in New Issue
Block a user