.. _email-notification-reference: Email Notifications =================== The `hello` service generated by ``daeploy init`` will send a notification if someone tries to greet "World" and you would be able to view the notification on the manager dashboard. In this tutorial we will see how the same notification can be send as an email. As a reminder, here is `service.py` for the `hello` service: .. testcode:: import logging from daeploy import service from daeploy.communication import notify, Severity logger = logging.getLogger(__name__) service.add_parameter("greeting_phrase", "Hello") @service.entrypoint def hello(name: str) -> str: greeting_phrase = service.get_parameter("greeting_phrase") if name == "World": notify( msg="Someone is trying to greet the World, too time consuming. Skipping!", severity=Severity.WARNING, ) return "Greeting failed" logger.info(f"Greeting someone with the name: {name}") return f"{greeting_phrase} {name}" if __name__ == '__main__': service.run() Manager Configuration --------------------- For the manager to be able to send emails you must configure it with an email and an SMTP server. Please refer to this page on the manager configuration: :ref:`email-config-reference` SDK Syntax ---------- By default, :func:`~daeploy.communication.notify` with not send any emails. For a notification to become an email notification, you have to pass a list of email addresses to the ``emails`` keyword argument of :func:`~daeploy.communication.notify` .. testcode:: import logging from daeploy import service from daeploy.communication import notify, Severity logger = logging.getLogger(__name__) service.add_parameter("greeting_phrase", "Hello") @service.entrypoint def hello(name: str) -> str: greeting_phrase = service.get_parameter("greeting_phrase") if name == "World": notify( msg="Someone is trying to greet the World, too time consuming. Skipping!", severity=Severity.WARNING, emails=["your@email.com"], ) return "Greeting failed" logger.info(f"Greeting someone with the name: {name}") return f"{greeting_phrase} {name}" if __name__ == '__main__': service.run() To make the email recipients dynamically changeable, we can use this in conjunction with :func:`~daeploy.service.add_parameter` like so .. testcode:: import logging from daeploy import service from daeploy.communication import notify, Severity logger = logging.getLogger(__name__) service.add_parameter("greeting_phrase", "Hello") service.add_parameter("emails", ["your@email.com"]) @service.entrypoint def hello(name: str) -> str: greeting_phrase = service.get_parameter("greeting_phrase") emails = service.get_parameter("emails") if name == "World": notify( msg="Someone is trying to greet the World, too time consuming. Skipping!", severity=Severity.WARNING, emails=emails, ) return "Greeting failed" logger.info(f"Greeting someone with the name: {name}") return f"{greeting_phrase} {name}" if __name__ == '__main__': service.run() This way, email addresses can be added and removed. You could of course use different emails for different notifications, so different stakeholders get notified of different things.