# apistar-mail [![PyPI](https://img.shields.io/pypi/v/apistar-mail.svg)](https://pypi.org/project/apistar-mail/) [![PyPI](https://img.shields.io/pypi/pyversions/apistar-mail.svg)](https://pypi.org/project/apistar-mail/) [![Build Status](https://travis-ci.org/androiddrew/apistar-mail.svg?branch=master)](https://travis-ci.org/androiddrew/apistar-mail) [![codecov](https://codecov.io/gh/androiddrew/apistar-mail/branch/master/graph/badge.svg)](https://codecov.io/gh/androiddrew/apistar-mail) Provides a simple interface to set up SMTP with your [APIStar](https://github.com/encode/apistar) application and send messages from your view functions. Please note this work derives largely from the [Flask-Mail](https://github.com/mattupstate/flask-mail) extension by 'Dan Jacob' and contributors, but has been modified extensively to remove Python 2 support and be used as an APIStar component. ## Installation `$ pip install apistar-mail` ## Usage ### Example Setup To send mail messages from your view functions you must include a dictionary of mail options to the `MailComponent`. Here we have a minimally viable app capable of sending an email message and returning a 204 response code: ```python from apistar import App, Route from apistar.http import Response from apistar_mail import MailComponent, Mail, Message mail_options = { 'MAIL_SERVER': 'smtp.example.com', 'MAIL_USERNAME': 'me@example.com', 'MAIL_PASSWORD': 'dontcommitthistoversioncontrol', 'MAIL_PORT': 587, 'MAIL_USE_TLS': True, 'MAIL_DEFAULT_SENDER': 'me@example.com' } def send_a_message(mail: Mail): msg = Message(subject='Hello', body='Welcome to APIStar!', recipients=['you@example.com']) mail.send(msg) return Response('', 204) routes = [ Route('/', 'POST', send_a_message) ] components = [ MailComponent(**mail_options) ] app = App( routes=routes, components=components ) if __name__ == '__main__': app.serve('127.0.0.1', 5000, debug=True) ``` ### Sending Messages To send a message ,first include the Mail component for injection into your view. Then create an instance of Message, and pass it to your Mail component using `mail.send(msg)` ```python from apistar_mail import Mail, Message def send_a_message(mail:Mail): msg = Message('Hello', sender='drew@example.com', recipients=['you@example.com']) mail.send(msg) return ``` Your message recipients can be set in bulk or individually: ```python msg.recipients = ['you@example.com', 'me@example.com'] msg.add_recipient('otherperson@example.com') ``` If you have set `MAIL_DEFAULT_SENDER` you don’t need to set the message sender explicitly, as it will use this configuration value by default: ```python msg = Message('Hello', recipients=['you@example.com']) ``` The sender can also be passed as a two element tuple containing a name and email address which will be split like so: ```python msg = Message('Hello', sender=('Me', 'me@example.com')) assert msg.sender == 'Me ' ``` A Message can contain a body and/or HTML: ```python msg.body = 'message body' msg.html = 'Hello apistar_mail!' ``` ### Configuration Options apistar-mail is configured through the inclusion of the `MAIL` dictionary in your apistar settings. These are the available options: * 'MAIL_SERVER': default 'localhost' * 'MAIL_USERNAME': default None * 'MAIL_PASSWORD': default None * 'MAIL_PORT': default 25 * 'MAIL_USE_TLS': default False * 'MAIL_USE_SSL': default False * 'MAIL_DEFAULT_SENDER': default None * 'MAIL_DEBUG': default False * 'MAIL_MAX_EMAILS': default None * 'MAIL_SUPPRESS_SEND': default False * 'MAIL_ASCII_ATTACHMENTS': False ## Testing To run the test suite with coverage first install the package in editable mode with it's testing requirements: `$ pip install -e ".[testing]"` To run the project's tests `$ pytest --cov` To run tests against multiple python interpreters use: `$ tox`