|  |  | # apistar-mail
 | 
						
						
						
							|  |  | ---
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |  `apistar-mail` provides a simple interface to set up SMTP with your 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' but has been modified extensively to remove Python 2 support and be used as an APIStar component.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## Installation
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | `$  pip install apistar-mail`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ## Usage
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ### Setup
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | To send mail messages from your view functions you must include the `MAIL` dictionary in your settings and the mail_component in your component list.
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | from apistar import WSGIApp as App
 | 
						
						
						
							|  |  | from apistar_mail import mail_component
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | settings = {
 | 
						
						
						
							|  |  |     'MAIL': {
 | 
						
						
						
							|  |  |         'MAIL_SERVER': 'smtp.example.com',
 | 
						
						
						
							|  |  |         'MAIL_USERNAME': 'drew@example.com',
 | 
						
						
						
							|  |  |         'MAIL_PASSWORD': 'dontcommitthistoversioncontrol',
 | 
						
						
						
							|  |  |         'MAIL_PORT': 587,
 | 
						
						
						
							|  |  |         'MAIL_USE_TLS': True,
 | 
						
						
						
							|  |  |         'MAIL_DEFAULT_SENDER': 'drew@example.com'
 | 
						
						
						
							|  |  |     }
 | 
						
						
						
							|  |  | }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | components = [
 | 
						
						
						
							|  |  |     mail_component
 | 
						
						
						
							|  |  | ]
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | app = App(
 | 
						
						
						
							|  |  |     settings=settings,
 | 
						
						
						
							|  |  |     routes=routes,
 | 
						
						
						
							|  |  |     components=components
 | 
						
						
						
							|  |  | )
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ### 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)`
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 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:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 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:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 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:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | msg = Message('Hello',
 | 
						
						
						
							|  |  |               sender=('Me', 'me@example.com'))
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | assert msg.sender == 'Me <me@example.com>'
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | A Message can contain a body and/or HTML:
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | msg.body = 'message body'
 | 
						
						
						
							|  |  | msg.html = '<b>Hello apistar_mail!</b>'
 | 
						
						
						
							|  |  | ```
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | ### 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` |