djeuscan: add sendmail email backend
Signed-off-by: Corentin Chary <corentin.chary@gmail.com>
This commit is contained in:
		
							
								
								
									
										53
									
								
								euscanwww/euscanwww/sendmail.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								euscanwww/euscanwww/sendmail.py
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user