From 504fcc4369ba44268dfcad3561e80a50d417a56e Mon Sep 17 00:00:00 2001 From: Martin Mahner Date: Wed, 1 Jun 2011 12:38:04 +0000 Subject: [PATCH] Added smtp lib --- pastebin/smtp.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pastebin/smtp.py diff --git a/pastebin/smtp.py b/pastebin/smtp.py new file mode 100644 index 0000000..f23b5f3 --- /dev/null +++ b/pastebin/smtp.py @@ -0,0 +1,53 @@ +"""sendmail email backend class.""" + +import threading + +from django.conf import settings +from django.core.mail.backends.base import BaseEmailBackend +from subprocess import Popen,PIPE + +class EmailBackend(BaseEmailBackend): + def __init__(self, fail_silently=False, **kwargs): + super(EmailBackend, self).__init__(fail_silently=fail_silently) + self._lock = threading.RLock() + + def open(self): + return True + + def close(self): + pass + + def send_messages(self, email_messages): + """ + Sends one or more EmailMessage objects and returns the number of email + messages sent. + """ + if not email_messages: + return + self._lock.acquire() + try: + num_sent = 0 + for message in email_messages: + sent = self._send(message) + if sent: + num_sent += 1 + finally: + self._lock.release() + return num_sent + + def _send(self, email_message): + """A helper method that does the actual sending.""" + if not email_message.recipients(): + return False + try: + ps = Popen(["sendmail"]+list(email_message.recipients()), \ + stdin=PIPE) + ps.stdin.write(email_message.message().as_string()) + ps.stdin.flush() + ps.stdin.close() + return not ps.wait() + except: + if not self.fail_silently: + raise + return False + return True