Elegant and simple email library for python 2/3
Project description
Modern email handling in python.
m = emails.Message(html=T("<html><p>Build passed: {{ project_name }} <img src='cid:icon.png'> ..."),
text=T("Build passed: {{ project_name }} ..."),
subject=T("Passed: {{ project_name }}#{{ build_id }}"),
mail_from=("CI", "ci@mycompany.com"))
m.attach(filename="icon.png", content_disposition="inline", data=open("icon.png"))
response = m.send(render={"project_name": "user/project1", "build_id": 121},
to='somebody@mycompany.com',
smtp={"host":"mx.mycompany.com", "port": 25})
if response.status_code not in [250, ]:
# message is not sent, retry later
...
See the same code, without Emails.
Emails code is not much simpler than the same code in django, but it is still more elegant, can be used in django environment and has html transformation methods (see HTML Transformer section).
Features
HTML-email message abstraction
Method to transform html body:
css inlining (using peterbe’s premailer)
image inlining
DKIM signature
Message loaders
Send directly or via django email backend
Examples
Create message:
import emails
message = emails.html(html=open('letter.html'),
subject='Friday party',
mail_from=('Company Team', 'contact@mycompany.com'))
Attach files or inline images:
message.attach(data=open('event.ics'), filename='Event.ics')
message.attach(data=open('image.png'), filename='image.png',
content_disposition='inline')
Use templates:
from emails.template import JinjaTemplate as T
message = emails.html(subject=T('Payment Receipt No.{{ billno }}'),
html=T('<p>Dear {{ name }}! This is a receipt...'),
mail_from=('ABC', 'robot@mycompany.com'))
message.send(to=('John Brown', 'jbrown@gmail.com'),
render={'name': 'John Brown', 'billno': '141051906163'})
Add DKIM signature:
message.dkim(key=open('my.key'), domain='mycompany.com', selector='newsletter')
Generate email.message or rfc822 string:
m = message.as_message()
s = message.as_string()
Send and get response from smtp server:
r = message.send(to=('John Brown', 'jbrown@gmail.com'),
render={'field1': 'X'},
smtp={'host':'smtp.mycompany.com', 'port': 465, 'ssl': True})
assert r.status_code == 250
Django
DjangoMessage helper sends via django configured email backend:
from emails.django_ import DjangoMessage as Message
message = Message(...)
message.send(mail_to=('John Brown', 'jbrown@gmail.com'),
context={'field1': 'X'})
Flask
For flask integration take a look at flask-emails
HTML transformer
Message HTML body can be modified with ‘transformer’ object:
>>> message = emails.Message(html="<img src='promo.png'>")
>>> message.transformer.apply_to_images(func=lambda src, **kw: 'http://mycompany.tld/images/'+src)
>>> message.transformer.save()
>>> message.html
u'<html><body><img src="http://mycompany.tld/images/promo.png"></body></html>'
Code example to make images inline:
>>> message = emails.Message(html="<img src='promo.png'>")
>>> message.attach(filename='promo.png', data=open('promo.png'))
>>> message.attachments['promo.png'].is_inline = True
>>> message.transformer.synchronize_inline_images()
>>> message.transformer.save()
>>> message.html
u'<html><body><img src="cid:promo.png"></body></html>'
Loaders
python-emails ships with couple of loaders.
Load message from url:
import emails.loader
message = emails.loader.from_url(url="http://xxx.github.io/newsletter/2015-08-14/index.html")
Load from zipfile or directory:
message = emails.loader.from_zipfile(open('design_pack.zip'))
message = emails.loader.from_directory('/home/user/design_pack')
Zipfile and directory loaders require at least one html file (with “html” extension).
Install
Install from pypi:
$ [sudo] pip install emails
Install on Ubuntu from PPA:
$ [sudo] add-apt-repository ppa:lavrme/python-emails-ppa
$ [sudo] apt-get update
$ [sudo] apt-get install python-emails
TODO
Documentation
Increase test coverage
Feature: load message from rfc2822
Feature: export message to directory or zipfile
Performance: Patch pydkim for performance: i.e. preload key only once
Distribution: deb package (debianization example)
Distribution: rpm package
Other: Flask extension
Feature: ESP integration - Amazon SES, SendGrid, …
How to Help
Library is under development and contributions are welcome.
Open an issue to start a discussion around a bug or a feature.
Fork the repository on GitHub and start making your changes to a new branch.
Write a test which shows that the bug was fixed.
Send a pull request. Make sure to add yourself to AUTHORS.
See also
There are plenty other python email-around libraries that may fit your needs:
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 emails-0.3.9-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d542b8a6a3c33fd4027ddd28ba86a090ae0d615a8b06744ebec10f25d5aac92 |
|
MD5 | a75283c8a65774bee8abbcecf223a291 |
|
BLAKE2b-256 | cb42c6c1c5aa35f2d8277d0ecee1a6a5d91c4025867447ad7ed7c3c7ec24473b |