A developer-centric utility for sending asynchronous mails.
Project description
Introduction
mailables
is a developer-centric utility for sending asynchronous mails.
Requirements
Python 3.7+
Installation
$ pip install mailables
Usage
from mailables import Mailer, EmailMessage message = EmailMessage( to='User Name <user@example.com>', from_address='sender@example.com', subject='Hey', text_body='This is sent using mailables!', html_body='<b>This is sent using mailables!</b>' ) mailer = Mailer('smtp://localhost:25') await mailer.send(message)
Dependencies
Mailables does not have any hard dependencies, but the following are optional:
aiofiles
- required byFileTransport
.aiosmtpdlib
- required bySMTPTransport
.
You can install all of these with pip install mailables[full]
.
Configuration
In order to send email you need to configure transport and mailer.
Mailer is a class with which you would work all time. Think it is a public interface to mailables
.
And transport is a concrete adapter which does actual sending.
from mailables import Mailer mailer = Mailer('smtp://localhost:25')
When you need to fine-grained control on the transport configuration you may pass the transport instance instead of URL string:
from mailables import Mailer, SMTPTransport mailer = Mailer(SMTPTransport(host='localhost', port=25))
This approach gives you full control on transport construction.
Note, that you are not limited to one mailer only, your application may have multiple mailers with different transports/settings.
Mail message
The mail message is represented by EmailMessage
class.
from mailables import EmailMessage message = EmailMessage( to=['root@localhost', 'admin@localhost'], from_address='user@localhost', subject='This is a test email', text_body='And this is a body', html_body='And HTML body <b>supported</b> as well', )
Attaching files
from mailables import EmailMessage, Attachment message = EmailMessage( attachments=[ Attachment(contents='CONTENTS', file_name='file.txt') ] ) # or alternatively using `attach` method: message.attach(contents='CONTENTS', file_name='file.txt') # or you can add attachment instance using `add_attachment` method: message.add_attachment(Attachment('contents'))
Transports
Here is the list of included transports
SMTPTransport
Sends messages using SMTP protocol.
from mailables import SMTPTransport transport = SMTPTransport(host='localhost', port=25, use_ssl=True)
FileTransport
File transport does not send email to anywhere. It dumps messages into mailbox directory in *.eml
format.
from mailables import FileTransport transport = FileTransport(directory='/tmp/mailbox')
InMemoryTransport
Stores sent emails in a local variable.
from mailables import InMemoryTransport, EmailMessage storage = [] transport = InMemoryTransport(storage=storage) # example: transport.send(EmailMessage(subject='Hey', to='root@localhost')) assert len(storage) == 1
NullTransport
This transport does not send anything at all. Use it when you want to completely silence the mailer.
from mailables import NullTransport transport = NullTransport()
Building custom transports
Extend mailables.transport.BaseTransport
class and
implement async def send(self, message: EmailMessage)
method:
For example, we will create a simple transport class for writing mails to a stdout:
from mailables import BaseTransport, EmailMessage, Mailer class ConsoleTransport(BaseTransport): async def send(self, message: EmailMessage): print(str(message)) mailer = Mailer(ConsoleTransport())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mailables-0.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d0fd28200167abdc8a74ab14ab4f2d34ef826e0deb7b783de37924f91b3339a |
|
MD5 | 784b296d938d9e8fc008c6294da2eac6 |
|
BLAKE2-256 | 58446e1941ffbca464c284e8aee1d72d1f1ab4fe7c76836b2e2d89ea91c8081f |