.. _cookbook: Cookbook ========= This section provides various examples for various needs. .. _cookbook-campaign: Email Campaign -------------- In case you have a list of clients or customers you wish to send personalized emails, you may benefit from templating. It may help to make the templates to an HTML file, polish them and after then send: .. code-block:: python from redmail import EmailSender email = EmailSender(...) email.receivers = ['we@example.com'] email.set_template_paths( html="path/to/campaigns" ) Then make a HTML file, for example ``path/to/campaigns/summer_sale.html``: .. code-block:: html
We are pleased to inform you that we have a lot of products in huge discounts.
Kind regards, We Ltd.
Finally send the emails: .. code-block:: python discounts = {'shoes': 0.2, 'shirts': 0.4} customers = ['cust1@example.com', 'cust2@example.com', ...] for customer in customers: email.send( subject="Summer Sale!", html_template="summer_sale.html", body_params={ "customer": customer, "discounts": discounts }, body_images={ "company_logo": "path/to/logo.png" } ) .. _cookbook-alerts: Error Alerts ------------ If you are building long running program (ie. web app) you can make a templated error alerts that include the full traceback: .. code-block:: python from redmail import EmailSender error_email = EmailSender(...) error_email.sender = 'me@example.com' error_email.receivers = ['me@example.com'] error_email.html = """System running on {{ node }}
""", body_images={ "perf_plot": fig_performance, }, body_tables={ "tbl_summary": df_summary } ) Distribution Lists ------------------ There might be a situation in which you would like to specify some sets of pre-defined distribution lists for which you will send emails to depending on situation. To accomplish this, you can create subclass the :class:`.EmailSender` and create cystin distribution list logic: .. code-block:: python from redmail import EmailSender class DistributionSender(EmailSender): "Send email using pre-defined distribution lists" def __init__(self, *args, distributions:dict, **kwargs): super().__init__(*args, **kwargs) self.distributions = distributions def get_receivers(self, receiver_list): if receiver_list: return self.distributions[receiver_list] def get_cc(self, receiver_list): if receiver_list: return self.distributions[receiver_list] def get_bcc(self, receiver_list): if receiver_list: return self.distributions[receiver_list] Then to use it: .. code-block:: python email = DistributionSender( host="localhost", port=0, distributions={ "managers": ["boss1@example.com", "boss2@example.com"], "developers": ["dev1@example.com", "dev2@example.com"] } ) email.send( subject="Important news", receivers="developers", cc="managers", ... ) You can also accomplish this without subclassing to limited extent: .. code-block:: python managers = EmailSender(host="localhost", port=0) managers.receivers = ["boss1@example.com", "boss2@example.com"] developers = EmailSender(host="localhost", port=0) developers.receivers = ["dev1@example.com", "dev2@example.com"] # Send an email to the developers developers.send( subject="Important news" )