base email backend class class baseemailbackend do something with connection def initself failsilentlyfalse kwargs self failsilently failsilently def openself pass def closeself send one or more emailmessage objects and return the number of email messages sent base class for email backend implementations subclasses must at least overwrite send_messages open and close can be called indirectly by using a backend object as a context manager with backend as connection do something with connection pass open a network connection this method can be overwritten by backend implementations to open a network connection it s up to the backend implementation to track the status of a network connection if it s needed by the backend this method can be called by applications to force a single network connection to be used when sending mails see the send_messages method of the smtp backend for a reference implementation the default implementation does nothing close a network connection send one or more emailmessage objects and return the number of email messages sent
class BaseEmailBackend:
    

    def __init__(self, fail_silently=False, **kwargs):
        self.fail_silently = fail_silently

    def open(self):
        
        pass

    def close(self):
        
        pass

    def __enter__(self):
        try:
            self.open()
        except Exception:
            self.close()
            raise
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.close()

    def send_messages(self, email_messages):
        
        raise NotImplementedError(
            "subclasses of BaseEmailBackend must override send_messages() method"
        )