{ "info": { "author": "Mark Vartanyan", "author_email": "kolypto@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://api.travis-ci.org/kolypto/py-mailem.png?branch=master)](https://travis-ci.org/kolypto/py-mailem)\n[![Pythons](https://img.shields.io/badge/python-2.7%20%7C%203.4%E2%80%933.7%20%7C%20pypy-blue.svg)](.travis.yml)\n\n\n\n\n\n\n\nMail'Em\n=======\n\nSlim, flexible, yet full-featured e-mailing library.\n\n* Unicode\n* Easy attachments\n* Inline images\n* E-Mail templates\n* Tools for unit-tests\n* Made perfect once and for all. Simple and cute :)\n\nHere'a a full example:\n\n```python\nfrom mailem import Message, Postman, Attachment, ImageAttachment\nfrom mailem.connection import SMTPConnection\n\n# Create the message\nmessages = [\n # Message with attachments\n Message(\n ['kolypto@gmail.com'],\n u\"Mail'em test\",\n u\"yeah baby, it works!\",\n attachments = [\n Attachment(u'test.txt', open('test.txt').read())\n ]\n ),\n # Message with inline images (!)\n Message(\n ['kolypto@gmail.com'],\n u\"Mail'em test with inline images\",\n u\"Cute: \", # cid:\n attachments = [\n ImageAttachment('cute.jpg', open('cute.jpg').read(), 'inline')\n ]\n ),\n]\n\n# Initialize a postman with SMTP connection to GMail\npostman = Postman('user@gmail.com',\n SMTPConnection(\n 'smtp.gmail.com', 587,\n 'user@gmail.com', 'pass',\n tls=True\n ))\n\n# Send everything we have\nwith postman.connect() as c:\n map(c.sendmail, messages)\n```\n\nAlso see [Template](#template).\n\n\n\nTable of Contents\n=================\n\n* Sending Messages\n * Message\n * Attachment\n * ImageAttachment\n * Postman\n * Postman.connect\n * Postman.loopback\n * Connection\n * SMTPConnection\n * LoopbackConnection\n* Templating\n * Template\n * Template.set_renderer\n * Template.defaults\n * Template.call\n * Template.from_directory\n * TemplateRegistry\n * TemplateRegistry.add\n * TemplateRegistry.set_renderer\n * TemplateRegistry.defaults\n * TemplateRegistry.get\n * TemplateRegistry.from_directory \n\nSending Messages\n================\n\nMessage\n----------------------\n```python\nMessage(recipients, subject, html=None,\n text=None, sender=None, cc=None,\n bcc=None, attachments=None,\n reply_to=None, date=None, headers=None)\n```\n\nConstruct a Message object.\n\nNotes:\n\n* Full unicode support, and Unicode is the default\n* You can provide `html` or `text` contents. If both are specified -- the message will have an 'alternative' container,\n so the user will receive both HTML and plaintext. The client will choose which one to display.\n* E-Mail addresses, such as `recipients` and `sender`, can be specified in one of the following formats:\n\n * `'user@example.com'`: Just an e-mail address\n * `('user@example.com', u'Honored User')`: email address with name\n\nArguments:\n\n* `recipients`: List of recipients\n* `subject`: Message subject\n* `html`: Message body, HTML\n* `text`: Message body, Text\n* `sender`: Sender e-mail address. If not set explicitly, the default will be used on send\n* `cc`: CC list\n* `bcc`: BCC list\n* `attachments`: List of attachments\n* `reply_to`: Reply-to address\n* `date`: Send date\n* `headers`: Additional headers\n\n\n### Attachment\n```python\nAttachment(filename, data,\n content_type='application/octet-stream',\n disposition='attachment', headers=None)\n```\n\nFile attachment information.\n\nThis can be provided to the [`Message`](#message) object on construction.\n\n* `filename`: Filename of attachment\n* `data`: Raw file data\n* `content_type`: File mimetype\n* `disposition`: Content-Disposition: 'attachment', 'inline', ...\n* `headers`: Additional headers for the attachment\n\n\n### ImageAttachment\n```python\nImageAttachment(filename, data,\n disposition='attachment', headers=None)\n```\n\nImage attachment.\n\n* It guesses the Content-Type from the data stream\n* Supports 'inline' images: images embedded in the email. Useful for templates.\n\n Once an 'inline' image is created, its filename is used for 'Content-ID', which allows to reference it in the HTML body:\n\n ```python\n from mailem import Message, Attachment, ImageAttachment\n\n msg = Message(\n ['test@example.com'],\n 'Hello',\n '', # Referenced with \"cid:\"\n attachments=[\n ImageAttachment('flowers.jpg', open('flowers.jpg').read(), 'inline')\n ]\n )\n ```\n\nArguments:\n\n* `filename`: Image attachment filename. Will also become 'Content-ID' when inlined.\n* `data`: The raw file data\n\n\n\n\nPostman\n----------------------\n```python\nPostman(sender, connection)\n```\n\nPostman is the object you use to send messages through a configured Connection object.\n\nExample:\n\n```python\nfrom mailem import Message, Postman\nfrom mailem.connection import SMTPConnection\n\n# Construct the message\nmsg = Message(\n ['kolypto@gmail.com'],\n u\"Mail'em test\",\n u\"yeah baby, it works!\"\n)\n\n# Create the postman (see SMTPConnection)\npostman = Postman('user@gmail.com',\n SMTPConnection(...))\n\n# Connect, and send the message\nwith postman.connect() as c:\n c.sendmail(msg)\n```\n\n* `sender`: Default sender: e-mail or (name, email).\n Is used for messages which do not specify the sender address explicitly.\n* `connection`: Connection object to use. See below.\n\n\n### Postman.connect\n```python\nconnect()\n```\n\nGet connected Postman context manager.\n\n\nReturns: `mailem.postman.ConnectedPostman` \n\n### Postman.loopback\n```python\nloopback()\n```\n\nGet a context manager which installs a LoopbackConnection on this postman.\n\nThis allows you to record outgoing messages by mocking a Postman.\nSee [`LoopbackConnection`](#loopbackconnection).\n\n\nReturns: `MockedPostman` Context manager which loops back outgoing messages\n\nConnection\n----------\n\nConnection object represents a connection to a service which can send e-mail messages for us.\n\n### SMTPConnection\n```python\nSMTPConnection(host, port, username,\n password, local_hostname=None,\n ssl=False, tls=False)\n```\n\nSMTP connection.\n\nSee [smtplib](https://docs.python.org/2/library/smtplib.html) for the list of exceptions that may occur.\n\nExample:\n\n```python\nfrom mailem import Postman\nfrom mailem.connection import SMTPConnection\n\npostman = Postman('user@gmail.com',\n SMTPConnection(\n 'smtp.gmail.com', 587,\n 'user@gmail.com', 'pass',\n tls=True\n ))\n\nwith postman.connect() as c:\n c.sendmail(msg)\n```\n\nArguments:\n\n* `host`: SMTP server hostname\n* `port`: SMTP server port number.\n* `username`: User name to authenticate with\n* `password`: Password\n* `local_hostname`: FQDN of the local host for the HELO/EHLO command. When `None`, is detected automatically.\n* `ssl`: Use SSL protocol?\n* `tls`: Use TLS handshake?\n\n\n### LoopbackConnection\n```python\nLoopbackConnection()\n```\n\nLoopback connection allows to record all outgoing messages instead of sending them.\n\nYou can install it manually:\n\n```python\nfrom mailem import Postman\nfrom mailem.connection import LoopbackConnection\n\nlo = LoopbackConnection()\npostman = Postman('user@example.com', lo)\n#... send\nmessages = lo.get_messages()\n```\n\nor you can mock an existing Postman with `loopback()` helper:\n\n```python\nfrom mailem import Postman\nfrom mailem.connection import SMTPConnection\n\npostman = Postman('user@example.com',\n SMTPConnection(...))\n\nwith postman.loopback() as lo:\n # Send\n with postman.connect() as c: # mocked!\n c.sendmail(msg)\n\n# Get\nsent_messages = lo.get_messages()\n```\n\nLoopback can be installed multiple times, and only top-level loopback will catch the messages:\n\n```python\nwith postman.loopback() as lo1:\n with postman.loopback() as lo2:\n with postman.connect() as c:\n c.sendmail(msg)\n\nlen(lo1) #-> 0\nlen(lo2) #-> 1\n```\n\nAlso note that `LoopbackConnection` subclasses `list`, so all list methods, including iteration, is available.\n\n\n\n\n\nTemplating\n==========\n\nTemplate\n--------\n```python\nTemplate(subject=None, html=None,\n text=None, attachments=None,\n defaults=None)\n```\n\nA templated e-mail.\n\nBy default, the Template uses Python's `Template` renderer, which allows simple PHP-style substitution,\nbut this can be overridden using set_renderer().\n\nFirst, a template is defined:\n\n```python\nfrom mailem import Attachment\nfrom mailem.template import Template\n\nsignup = Template('Congrats $user, you've signed up!',\n 'Welcome to our website!
-- $domain',\n attachments=[\n Attachment('logo.jpg', open('logo.jpg').read(), 'inline'))\n ],\n defaults={'domain': 'localhost'} # default template values\n)\n```\n\nNow, having the template, you render it to a [`Message`](#message) by calling it:\n\n```python\nmessage = signup(['user@gmail.com'], dict(user='Honored User',))\n```\n\nReady for sending! :)\n\n* `subject`: Message subject template\n* `html`: HTML message template, if any\n* `text`: Text message template, if any\n* `attachments`: Attachments for the template. Most probably, inline elements.\n* `defaults`: Default template values, if required. The user can override these later.\n\n\n### Template.set_renderer\n```python\nset_renderer(Renderer, **kwargs)\n```\n\nSet renderer to be used with this template.\n\nA Renderer is any class that can be constructed with a template string argument,\nand called with template values dict to render it.\n\nWhen no renderer was explicitly set, it defaults to PythonTemplateRenderer.\n\nSee [mailem/template/renderer.py](mailem/template/renderer.py): it's easy to implement renderers with custom behavior!\n\n* `Renderer`: Renderer class.\n* `**kwargs`: Additional arguments to renderer, if supported\n\n\n\n### Template.defaults\n```python\ndefaults(values)\n```\n\nSet default values.\n\nNew values will overwrite the previous.\n\n* `values`: Default template values\n\n\n\n### Template.__call__\n```python\n__call__(recipients, values, **kwargs)\n```\n\nCreate a `Message` object using the template values.\n\n* `recipients`: Message recipients list\n* `values`: Dictionary with template values\n* `**kwargs`: keyword arguments for the [`Message`](#message) constructor\n\nReturns: `Message` The rendered `Message` object\n\n### Template.from_directory\n```python\nfrom_directory(path,\n subject_name='subject.txt',\n html_name='index.htm',\n text_name='index.txt',\n inline_rex='^i-(.*)')\n```\n\nConvenience class method to import a directory as a template:\n\n* `subject.txt` is the subject string template\n* `index.htm` is the HTML template\n* `index.txt` is the plaintext template\n* All files matching the 'i-(*)' format are attached as 'inline', and hence can be referenced in the template:\n\n E.g. file 'i-flower.jpg' can be inlined as ``.\n\n* All other files are just attachments.\n\nExample:\n\n```python\nsignup = Template.from_directory('templates/signup/')\n```\n\n* `path`: Path to the directory\n* `subject_name`: Subject template filename\n* `html_name`: Html template filename\n* `text_name`: Plaintext template filename\n* `inline_rex`: Regular expression to match files that should be inlined.\n\n If the RegExp defines capture groups, group $1 will be used as the fact filename.\n\nReturns: `Template` Template\n\nTemplateRegistry\n----------------\n\n```python\nTemplateRegistry()\n```\n\nE-Mail template registry.\n\nSimply contains all your templates and allows to render these by name.\nUseful if you have multiple templates in your app and want to have them prepared.\n\nInitially, the registry is empty, and you add [`Template`](#template) objects one by one:\n\n```python\nfrom mailem.template import Template, TemplateRegistry\n\ntemplates = TemplateRegistry()\ntemplates.add('signup', Template(\n 'Congrats $user, you've signed up!',\n 'Welcome to our website!
-- $domain',\n))\ntemplates.defaults(dict(domain='example.com')) # set defaults on all templates\n```\n\nAlternatively, you can use [`TemplateRegistry.from_directory()`](#templateregistryfrom_directory) to load templates\nfrom filesystem.\n\nNow, to render a template, you [`get()`](#templateregistryget) it by name:\n\n```python\nmsg = templates.get('signup')(['user@gmail.com'], dict(user='Honored User',))\n```\n\n\n\n### TemplateRegistry.add\n```python\nadd(name, template)\n```\n\nRegister a template\n\n\n* `template`: Template object\n\nReturns: `mailem.template.Template` The added template (in case you want to set something on it)\n\n### TemplateRegistry.set_renderer\n```python\nset_renderer(renderer, **kwargs)\n```\n\nSet renderer to be used with all templates.\n\nCan be called both before adding templates and after.\n\n* `renderer`: Renderer class to use\n* `**kwargs`: Additional arguments for the renderer\n\n\n\n### TemplateRegistry.defaults\n```python\ndefaults(values)\n```\n\nSet default values on all templates.\n\nNew values will overwrite the previous.\n\nCan be called both before adding templates and after.\n\n* `values`: Default template values\n\n\n\n### TemplateRegistry.get\n```python\nget(name)\n```\n\nGet a Template by name\n\n* `name`: Template name\n\nReturns: `mailem.template.Template` \n\n### TemplateRegistry.from_directory\n```python\nfrom_directory(path, **kwargs)\n```\n\nConvenience method to construct a template registry\nwith a directory where each template is in a subdirectory\n\n* `path`: Path to templates\n* `**kwargs`: Arguments to [Template.from_directory()](#templatefrom_directory), if required\n\nReturns: `mailem.template.registry.TemplateRegistry` \n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kolypto/py-mailem", "keywords": "e-mail,mail,template", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "mailem", "package_url": "https://pypi.org/project/mailem/", "platform": "any", "project_url": "https://pypi.org/project/mailem/", "project_urls": { "Homepage": "https://github.com/kolypto/py-mailem" }, "release_url": "https://pypi.org/project/mailem/0.0.4.post3/", "requires_dist": [ "future" ], "requires_python": "", "summary": "Slim, flexible, yet full-featured e-mailing library", "version": "0.0.4.post3" }, "last_serial": 4881388, "releases": { "0.0.1-0": [ { "comment_text": "", "digests": { "md5": "56020db6df4953291c3541b21b99c72b", "sha256": "dbd9d269730af209aef4408b0803341d8ad9e784612cabd9091e87338970195c" }, "downloads": -1, "filename": "mailem-0.0.1_0-py2-none-any.whl", "has_sig": false, "md5_digest": "56020db6df4953291c3541b21b99c72b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20364, "upload_time": "2014-08-14T14:58:33", "url": "https://files.pythonhosted.org/packages/a1/9a/95af77ed338127c2c793a9df5e1fb1bb78432b4551423e35584e4440be3e/mailem-0.0.1_0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8ec19843dff1d2cef46d9e3d5de5353", "sha256": "4b1f436aa6d8c5022bdc2dc7dec6e9a057644510894abce400b7315a4cecc1c7" }, "downloads": -1, "filename": "mailem-0.0.1-0.tar.gz", "has_sig": false, "md5_digest": "a8ec19843dff1d2cef46d9e3d5de5353", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15790, "upload_time": "2014-08-14T14:58:30", "url": "https://files.pythonhosted.org/packages/1c/c0/179629c44d6904c1cbd224769d7222d7449e65878984f722e7fc13fc0339/mailem-0.0.1-0.tar.gz" } ], "0.0.2-0": [ { "comment_text": "", "digests": { "md5": "8e1da4648251d8246d0033a83ba47c70", "sha256": "8babe897f25dbc1b4ecc528d8b0fece6c1973d99157c785bc1c483f0a0dc02c9" }, "downloads": -1, "filename": "mailem-0.0.2_0-py2-none-any.whl", "has_sig": false, "md5_digest": "8e1da4648251d8246d0033a83ba47c70", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 23381, "upload_time": "2014-08-15T15:25:36", "url": "https://files.pythonhosted.org/packages/5d/f5/b957f3c604ed3c1787d33ab526fe04af2177a2b0009deef5f434dc8ee81c/mailem-0.0.2_0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46a85b6805f40abe8e2fc92f9beea911", "sha256": "89e9fe68877c02cd8a52fc6948601e1b221c03495609fd388f79d7f77f2c14f1" }, "downloads": -1, "filename": "mailem-0.0.2-0.tar.gz", "has_sig": false, "md5_digest": "46a85b6805f40abe8e2fc92f9beea911", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19151, "upload_time": "2014-08-15T15:25:33", "url": "https://files.pythonhosted.org/packages/4e/40/15e818e3e76603ad9470babaa0b284086bb5e7833332a6527ab721cec2d6/mailem-0.0.2-0.tar.gz" } ], "0.0.3-0": [ { "comment_text": "", "digests": { "md5": "b8da5c0d4eb1b31519ee061b35db3f88", "sha256": "e2d26ecbe0c6bce3685c28ce4679b946becfb294b964eccc2f62cacfff4e283e" }, "downloads": -1, "filename": "mailem-0.0.3_0-py2-none-any.whl", "has_sig": false, "md5_digest": "b8da5c0d4eb1b31519ee061b35db3f88", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 23967, "upload_time": "2014-08-15T16:01:33", "url": "https://files.pythonhosted.org/packages/63/04/10ae2a3dcc87b5c61a83b901fe3d97b5e78b6d271b21ed739b38f40c00b6/mailem-0.0.3_0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "054e2a9cf5a05ee25cb691593a1b4c6b", "sha256": "ec4da8aa86f05ee115117f6e099aea84b7470dffccad2875db77c3007eae4884" }, "downloads": -1, "filename": "mailem-0.0.3-0.tar.gz", "has_sig": false, "md5_digest": "054e2a9cf5a05ee25cb691593a1b4c6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19797, "upload_time": "2014-08-15T16:01:29", "url": "https://files.pythonhosted.org/packages/6e/83/d120edab2d0f3b97ffd2d64bd5e0e2e8005ef660534f6cb46674d260ee24/mailem-0.0.3-0.tar.gz" } ], "0.0.3-1": [ { "comment_text": "", "digests": { "md5": "fa98071966a1e253d6824384c5b05f48", "sha256": "e504851c64830f0815517cba94629c182eabba9e6780bd997bbb148ca65c4929" }, "downloads": -1, "filename": "mailem-0.0.3_1-py2-none-any.whl", "has_sig": false, "md5_digest": "fa98071966a1e253d6824384c5b05f48", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 23971, "upload_time": "2014-08-15T16:11:01", "url": "https://files.pythonhosted.org/packages/33/c2/7241d82d74be94e41ac299b5c74783491809169f827a477164905fc5125a/mailem-0.0.3_1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af9aa6b889fd27fd79da27927befbd0e", "sha256": "ec93920a51cdbc63b225a933d9de2456a0d1b1b6598fe5f86cd873385c7bd6b6" }, "downloads": -1, "filename": "mailem-0.0.3-1.tar.gz", "has_sig": false, "md5_digest": "af9aa6b889fd27fd79da27927befbd0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19796, "upload_time": "2014-08-15T16:10:58", "url": "https://files.pythonhosted.org/packages/24/53/4246fffaa8d6781b00fa75a21a20e13e662e533647a41903f714f699297a/mailem-0.0.3-1.tar.gz" } ], "0.0.4.post0": [ { "comment_text": "", "digests": { "md5": "5f906ef763d278273c45788ed6af50fb", "sha256": "3465d2485ab68947643aae0de3abdedca0d03db0205ea08353f82b8e1e4676a5" }, "downloads": -1, "filename": "mailem-0.0.4.post0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5f906ef763d278273c45788ed6af50fb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19632, "upload_time": "2019-01-09T12:41:24", "url": "https://files.pythonhosted.org/packages/5d/66/e75b11b9689d8ad45ccafa2bf8ac5f9d9269975b98c4cfd399c8629a9372/mailem-0.0.4.post0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5b41de80b6e39dc570f85479bee40af", "sha256": "45be11ec41012a01109f304284c0a94ea7039a54ec68308082d17c65b9ee3b4b" }, "downloads": -1, "filename": "mailem-0.0.4.post0.tar.gz", "has_sig": false, "md5_digest": "d5b41de80b6e39dc570f85479bee40af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19579, "upload_time": "2019-01-09T12:41:26", "url": "https://files.pythonhosted.org/packages/1b/ef/20304d6b5e167e532953a7a482c6f3fbf066b739755bef8fc3d327fa2791/mailem-0.0.4.post0.tar.gz" } ], "0.0.4.post1": [ { "comment_text": "", "digests": { "md5": "caac06f52ccda2e5a12eacd44049920a", "sha256": "0f051ee431784f24c806b4cff3c0ae7e933693ed55e43842c11692289210aed4" }, "downloads": -1, "filename": "mailem-0.0.4.post1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "caac06f52ccda2e5a12eacd44049920a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19668, "upload_time": "2019-02-11T12:08:29", "url": "https://files.pythonhosted.org/packages/de/0d/b1cd3e51e1232a5efd17be798cef9d39c10cd783e92263b269b518227aeb/mailem-0.0.4.post1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09c62318cfb4da05381cb28b76fea5d8", "sha256": "2a6ce8b1d584e0a65324542539827fb03f4a50b24f649570a9b3e7fb887eba6d" }, "downloads": -1, "filename": "mailem-0.0.4.post1.tar.gz", "has_sig": false, "md5_digest": "09c62318cfb4da05381cb28b76fea5d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19619, "upload_time": "2019-02-11T12:08:31", "url": "https://files.pythonhosted.org/packages/e5/96/ea0e83b11b1111e786e60faff40fb2346bda90b798a70c74c996ce23bf45/mailem-0.0.4.post1.tar.gz" } ], "0.0.4.post2": [ { "comment_text": "", "digests": { "md5": "0bf083a3f728ab34e3998ef6e065e360", "sha256": "4caf037ed0ff0ba89e1877b5b0829043d08c1e91f97f5e404e1cfcc880fc33b5" }, "downloads": -1, "filename": "mailem-0.0.4.post2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0bf083a3f728ab34e3998ef6e065e360", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23924, "upload_time": "2019-02-27T12:44:57", "url": "https://files.pythonhosted.org/packages/ed/2d/ced28e062fd123324781255b58fc230ed43bcb71e55f1cdfd51247c56429/mailem-0.0.4.post2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e1dea5296719e9114b13b9e030c98963", "sha256": "b718ba5ccd0f95e3eba4474b07b24c2758d94e0719fa4da165b83a41d16d0d3b" }, "downloads": -1, "filename": "mailem-0.0.4.post2.tar.gz", "has_sig": false, "md5_digest": "e1dea5296719e9114b13b9e030c98963", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24623, "upload_time": "2019-02-27T12:44:59", "url": "https://files.pythonhosted.org/packages/2c/dd/3174ed12528eb715915349771605ee1653aa783b0b8567924867cabca4be/mailem-0.0.4.post2.tar.gz" } ], "0.0.4.post3": [ { "comment_text": "", "digests": { "md5": "c6a545ec8f06accb5d8ebcfd15e65b84", "sha256": "277dc9c50a9e812be0c03083b8b9acd395b954e7153224033777168ad155d338" }, "downloads": -1, "filename": "mailem-0.0.4.post3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6a545ec8f06accb5d8ebcfd15e65b84", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24381, "upload_time": "2019-02-28T22:18:41", "url": "https://files.pythonhosted.org/packages/60/21/7ee2de88f89d76d74173b4047535614b9cf65311172fce5bd6212a516332/mailem-0.0.4.post3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "583a72dd054a7b67d9c1fac1cd70c7e4", "sha256": "faa8bbd3e188153cbebe39abcc084b39f9ce8355b6a129e49ea8532be42e38f2" }, "downloads": -1, "filename": "mailem-0.0.4.post3.tar.gz", "has_sig": false, "md5_digest": "583a72dd054a7b67d9c1fac1cd70c7e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25241, "upload_time": "2019-02-28T22:18:43", "url": "https://files.pythonhosted.org/packages/ab/bf/7d2ac19acac12a36835f80838ca24a364b4c8900ce69836e29ffc7615881/mailem-0.0.4.post3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6a545ec8f06accb5d8ebcfd15e65b84", "sha256": "277dc9c50a9e812be0c03083b8b9acd395b954e7153224033777168ad155d338" }, "downloads": -1, "filename": "mailem-0.0.4.post3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6a545ec8f06accb5d8ebcfd15e65b84", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24381, "upload_time": "2019-02-28T22:18:41", "url": "https://files.pythonhosted.org/packages/60/21/7ee2de88f89d76d74173b4047535614b9cf65311172fce5bd6212a516332/mailem-0.0.4.post3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "583a72dd054a7b67d9c1fac1cd70c7e4", "sha256": "faa8bbd3e188153cbebe39abcc084b39f9ce8355b6a129e49ea8532be42e38f2" }, "downloads": -1, "filename": "mailem-0.0.4.post3.tar.gz", "has_sig": false, "md5_digest": "583a72dd054a7b67d9c1fac1cd70c7e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25241, "upload_time": "2019-02-28T22:18:43", "url": "https://files.pythonhosted.org/packages/ab/bf/7d2ac19acac12a36835f80838ca24a364b4c8900ce69836e29ffc7615881/mailem-0.0.4.post3.tar.gz" } ] }