{ "info": { "author": "Olaf Gladis", "author_email": "github@gladis.org", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "smtplibaio\n==========\n\nThe smtplibaio package provides an SMTP client session object that can\nbe used to send e-mail in an asynchronous way (i.e. using `asyncio`).\n\nExamples\n--------\n\nLet\\'s start with a very basic example, using `SMTP_SSL`:\n\n``` {.python}\nimport asyncio\nfrom email.headerregistry import Address\nfrom email.message import EmailMessage\n\nfrom smtplibaio import SMTP, SMTP_SSL\n\n\nasync def send_email():\n from_addr = \"bob@example.net\"\n to_addr = \"alice@example.org\"\n\n message = \"Hi Alice !\"\n\n async with SMTP_SSL() as client:\n await client.sendmail(from_addr, to_addr, message)\n\n\nif __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.run_until_complete(send_email())\n loop.close()\n```\n\nAs you can see, the Asynchronous Context Manager makes it really easy to\nuse.\n\nSTARTTLS is supported only if you have the `aioopenssl` module\ninstalled. You must tell `SMTP` to use it upon instantiation:\n\n``` {.python}\n\n\n\nasync def send_email():\n \"\"\"\n \"\"\"\n from_addr = \"bob@example.net\"\n to_addr = \"alice@example.org\"\n\n message = \"Hi Alice !\"\n\n async with SMTP(use_aioopenssl=True) as client:\n await client.starttls()\n await client.sendmail(from_addr, to_addr, message)\n\n\nif __name__ == '__main__':\n loop = asyncio.get_event_loop()\n loop.run_until_complete(send_email())\n loop.close()\n```\n\nIn the next example, we are specifying the server hostname and port, we\nare using authentication and we are using the objects provided by the\n`email` package available in the Python Standard Library (i.e.\n`email.message.EmailMessage`) to build a proper email message.\n\n``` {.python}\n\n\n\n\nasync def send_email():\n # SMTP server:\n smtp_server = \"smtp.example.org\"\n port = 587\n\n # Credentials used to authenticate:\n username = \"alice\"\n passwd = \"5ecreT!\"\n\n # Use of Address object is not mandatory:\n from_addr = Address(\"Alice\", \"alice\", \"example.org\")\n to_addr = Address(\"Bob\", \"bob\", \"example.net\")\n bcc_addr = Address(\"John\", \"john\", \"example.net\")\n\n # E-mail subject and content:\n subject = \"Testing smtplibaio\"\n content = \"Look, all emails sent from this method are BCCed to John !\"\n\n # Build the list of recipients (To + Bcc):\n recipients = [to_addr.addr_spec, bcc_addr.addr_spec]\n\n # Build the EmailMessage object:\n message = EmailMessage()\n message.add_header(\"From\", str(from_addr))\n message.add_header(\"To\", str(to_addr))\n message.add_header(\"Bcc\", str(bcc_addr))\n message.add_header(\"Subject\", subject)\n message.add_header(\"Content-type\", \"text/plain\", charset=\"utf-8\")\n message.set_content(content)\n\n # Send the e-mail:\n async with SMTP_SSL(hostname=smtp_server, port=port) as client:\n await client.auth(username, passwd)\n await client.sendmail(from_addr.addr_spec, recipients, message.as_string())\n\n\nif __name__ == \"__main__\":\n loop = asyncio.get_event_loop()\n loop.run_until_complete(send_email())\n loop.close()\n```\n\nYou can also have a more fine-grained control using the lower-level\nmethods.\n\nSupported SMTP commands\n-----------------------\n\n- EHLO - `SMTP.ehlo()` ;\n- HELO - `SMTP.helo()` ;\n- STARTTLS - `SMTP.starttls()` (depending on aioopenssl availability)\n ;\n- AUTH - `SMTP.auth()` (*LOGIN*, *PLAIN* and *CRAM-MD5* mechanisms are\n suported) ;\n- MAIL FROM - `SMTP.mail()` ;\n- RCPT TO - `SMTP.rcpt()` ;\n- VRFY - `SMTP.vrfy()` ;\n- DATA - `SMTP.data()` ;\n- EXPN - `SMTP.expn()` ;\n- NOOP - `SMTP.noop()` ;\n- QUIT - `SMTP.quit()` ;\n- HELP - `SMTP.help()`.\n\nCurrent limitations\n-------------------\n\n- There is no direct support for Python\\'s\n `email.message.EmailMessage`. You can still use\n `email.message.EmailMessage.as_string()` or\n `str(email.message.EmailMessage)` instead. See the example above for\n further details.\n\nHow to contribute\n-----------------\n\nWe use [black][black], [isort][isort] in combination with [pre-commit][pre] to ensure one coding style and reduce the risk of merge conflicts.\nPlease [install pre-commit] to ensure your commits also meet these standards. When you see something to improve, have ideas for better tests or documentation, please create issues or create a pull request.\n\n\n[black]: https://github.com/psf/black\n[isort]: https://github.com/timothycrosley/isort\n[pre]: https://github.com/pre-commit/pre-commit-hooks\n[pre-install]: https://pre-commit.com/#install\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/hwmrocker/smtplibaio", "keywords": "", "license": "MIT", "maintainer": "Olaf Gladis", "maintainer_email": "github@gladis.org", "name": "smtplibaio", "package_url": "https://pypi.org/project/smtplibaio/", "platform": "", "project_url": "https://pypi.org/project/smtplibaio/", "project_urls": { "Homepage": "https://github.com/hwmrocker/smtplibaio", "Repository": "https://github.com/hwmrocker/smtplibaio" }, "release_url": "https://pypi.org/project/smtplibaio/2.1.2.post1/", "requires_dist": null, "requires_python": ">=3.5,<4.0", "summary": "An async version of smtplib", "version": "2.1.2.post1" }, "last_serial": 5964620, "releases": { "1.0.2": [ { "comment_text": "", "digests": { "md5": "1cf510c35896e4954e77231e730c9ba2", "sha256": "1d7b5d7f7607c68f2c6c22be64437425d4035471ff9859e3d7c2c7c7c02aac5b" }, "downloads": -1, "filename": "smtplibaio-1.0.2.tar.gz", "has_sig": false, "md5_digest": "1cf510c35896e4954e77231e730c9ba2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11557, "upload_time": "2015-05-21T18:32:20", "url": "https://files.pythonhosted.org/packages/c3/f5/a6991da49721036d59f2affb1c9802fdea4274c2a66b8226077632ed3443/smtplibaio-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "a17dd32910e03b57c945a40e38e10311", "sha256": "1c6ee97320a8420d21931f8ec5b0cef2073151c62ff79560cf0d7ef9bd798b51" }, "downloads": -1, "filename": "smtplibaio-1.0.3.tar.gz", "has_sig": false, "md5_digest": "a17dd32910e03b57c945a40e38e10311", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11557, "upload_time": "2015-05-21T18:45:12", "url": "https://files.pythonhosted.org/packages/b5/e3/0ef156814879fc35d383a78c214ec7550ea5f4378d051e4de5d5ba80b42b/smtplibaio-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "54914bf5122c656840765c75149c9e7c", "sha256": "31a4375be71ff10b5cad2cab5dace8a723e66d79400bfbadf5797adbd040fe3e" }, "downloads": -1, "filename": "smtplibaio-1.0.4.tar.gz", "has_sig": false, "md5_digest": "54914bf5122c656840765c75149c9e7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11750, "upload_time": "2016-08-18T13:37:44", "url": "https://files.pythonhosted.org/packages/81/b3/1fc73d1c8eeab53239a86d054c301f99c78ee505179d443274c8b555a5bd/smtplibaio-1.0.4.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "232bd11b598b7cc7ac19940d761f12ad", "sha256": "2ab05925de48d2a079b6979607b94c98b0ffd702cd5557b08d14593a2ee240a1" }, "downloads": -1, "filename": "smtplibaio-2.0.0.tar.gz", "has_sig": false, "md5_digest": "232bd11b598b7cc7ac19940d761f12ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 784, "upload_time": "2016-11-28T14:16:06", "url": "https://files.pythonhosted.org/packages/ac/6b/3bd72196cd98c8d308c2b0a415629f5ba04fa358ca2ff61a4af0e816b234/smtplibaio-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "77e5c896d620ac97c3dc3e511c3fce79", "sha256": "752f8ded904d002a01496cceb4c3aca03a29acf6fa1950c65c2c2937743c2849" }, "downloads": -1, "filename": "smtplibaio-2.0.1.tar.gz", "has_sig": false, "md5_digest": "77e5c896d620ac97c3dc3e511c3fce79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11655, "upload_time": "2016-12-07T19:59:10", "url": "https://files.pythonhosted.org/packages/03/6a/53a59a333cc191dbdee7be6b2a1ae8f558d7b635cd514152c31d82024692/smtplibaio-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "237a89c4f544bbc14c350c0cbe749b5f", "sha256": "eb2ce96476c1d5a4c7168bc2e7d4c0caf78f85581940598397deb45cb965041a" }, "downloads": -1, "filename": "smtplibaio-2.0.2.tar.gz", "has_sig": false, "md5_digest": "237a89c4f544bbc14c350c0cbe749b5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11674, "upload_time": "2016-12-21T13:08:15", "url": "https://files.pythonhosted.org/packages/de/74/39d448056e4deca7ae17e3f6f49246217f0cf2052487db4925feeb1b99e2/smtplibaio-2.0.2.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "adf82387df10a15a924724be0091d8fe", "sha256": "8d5f86b6b002805fa9569c0f3cc15e4d7c5e6ba503960a7eb6f64db16d4f70af" }, "downloads": -1, "filename": "smtplibaio-2.1.0.tar.gz", "has_sig": false, "md5_digest": "adf82387df10a15a924724be0091d8fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12065, "upload_time": "2017-04-24T20:38:38", "url": "https://files.pythonhosted.org/packages/0c/1c/3c6725012f80a696bd189e56341ea56d1d599c872c3f43af4306e9ac60ef/smtplibaio-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "f0610e15dce1389bc4ee1a2534a35ac8", "sha256": "b848b83df1506f5630d28630ac617d0316aa0d41ac3d406583350580a24f84f4" }, "downloads": -1, "filename": "smtplibaio-2.1.1.tar.gz", "has_sig": false, "md5_digest": "f0610e15dce1389bc4ee1a2534a35ac8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12054, "upload_time": "2017-04-24T20:46:11", "url": "https://files.pythonhosted.org/packages/b5/48/fa0bcbde0d483b6ea827639f534dadfe7b2b3d6c76f46dc56ff0839b8164/smtplibaio-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "83db6bdd0a0e3593f9fa5457e8fc1267", "sha256": "7681250fa64c8dc4741d5f69b998dbcde66d596237c89a68501b0d635d3e3e8e" }, "downloads": -1, "filename": "smtplibaio-2.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "83db6bdd0a0e3593f9fa5457e8fc1267", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5,<4.0", "size": 54779, "upload_time": "2019-04-12T12:33:19", "url": "https://files.pythonhosted.org/packages/e6/87/d3deccb57800c13a6ea562460a6b27d329c60b4f31f0777da76da55b1c6e/smtplibaio-2.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8c73ec47cf506d90826ce5f0d64d6ff", "sha256": "c973b115a37d10f16afb9e2606b56770781e9860a83d88b0218b5b5ded27433b" }, "downloads": -1, "filename": "smtplibaio-2.1.2.tar.gz", "has_sig": false, "md5_digest": "e8c73ec47cf506d90826ce5f0d64d6ff", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5,<4.0", "size": 15574, "upload_time": "2019-04-12T12:33:20", "url": "https://files.pythonhosted.org/packages/e0/44/008a03f63c5c5270bb0f6f807d44cdd5db920edff2f6fac9b6152eec6569/smtplibaio-2.1.2.tar.gz" } ], "2.1.2.post1": [ { "comment_text": "", "digests": { "md5": "8164022748a034ef3f152d0691fc6969", "sha256": "e2b1ef320ac1df1df5590769fa5657e1d8cee85c7509749e1733cba4437a1a7f" }, "downloads": -1, "filename": "smtplibaio-2.1.2.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "8164022748a034ef3f152d0691fc6969", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5,<4.0", "size": 16232, "upload_time": "2019-10-12T15:12:03", "url": "https://files.pythonhosted.org/packages/2d/09/8e483ba0f1e896dda450e497b966fa4cadc450e013de10d0b598531d09c5/smtplibaio-2.1.2.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05a4eea559c49c363b1f09582fc72448", "sha256": "f44a679b0defa820fe6b96860402a352a1c33294571844240baa16d4a83b7f86" }, "downloads": -1, "filename": "smtplibaio-2.1.2.post1.tar.gz", "has_sig": false, "md5_digest": "05a4eea559c49c363b1f09582fc72448", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5,<4.0", "size": 16558, "upload_time": "2019-10-12T15:12:05", "url": "https://files.pythonhosted.org/packages/f5/5e/734d64d33caadb96d7d244de9ddcd4a41bb9386fce8e59bb1a20748c7ef7/smtplibaio-2.1.2.post1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8164022748a034ef3f152d0691fc6969", "sha256": "e2b1ef320ac1df1df5590769fa5657e1d8cee85c7509749e1733cba4437a1a7f" }, "downloads": -1, "filename": "smtplibaio-2.1.2.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "8164022748a034ef3f152d0691fc6969", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5,<4.0", "size": 16232, "upload_time": "2019-10-12T15:12:03", "url": "https://files.pythonhosted.org/packages/2d/09/8e483ba0f1e896dda450e497b966fa4cadc450e013de10d0b598531d09c5/smtplibaio-2.1.2.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "05a4eea559c49c363b1f09582fc72448", "sha256": "f44a679b0defa820fe6b96860402a352a1c33294571844240baa16d4a83b7f86" }, "downloads": -1, "filename": "smtplibaio-2.1.2.post1.tar.gz", "has_sig": false, "md5_digest": "05a4eea559c49c363b1f09582fc72448", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5,<4.0", "size": 16558, "upload_time": "2019-10-12T15:12:05", "url": "https://files.pythonhosted.org/packages/f5/5e/734d64d33caadb96d7d244de9ddcd4a41bb9386fce8e59bb1a20748c7ef7/smtplibaio-2.1.2.post1.tar.gz" } ] }