{ "info": { "author": "Egor Urvanov", "author_email": "hedgehogues@bk.ru", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3.7" ], "description": "# Email client\n\nThis repo consist email client for [grader](https://github.com/Flesspro/grader) and other services and packages.\n\n## Installing and run\n\nYou need `python3.7`, `pytest5.0.1` and `make4.1`.\n\nInstallation: `pip install email-client`\n\nYou can see also [PyPi](https://pypi.org/project/email-client/1.3.0/).\n\nWe use makefile for run and environment variables for configuration.\n\nYou can find smtp-client and imap-client. If you want, you can customize parsing email into smtp-client, you can \nimplement custom strategy and use them. For default, we use strategy for grader. \n\nTo clean email (all emails are deleted):\n\n ENV_FILE=./.envs/my_envfile.env CLEAN=YES make clean\n\n## Examples \n\nCreating IMAPClient:\n\n from email_client import client_pkg\n\n client = client_pkg.IMAPClient(\n imap_host=os.getenv('IMAP_HOST'),\n imap_port=os.getenv('IMAP_PORT'),\n login=os.getenv('EMAIL_LOGIN'),\n password=os.getenv('EMAIL_PASSWORD'),\n extract_strategy=strategy,\n )\n\nYou can log in:\n\n client.login()\n\nAnd logout:\n\n client.logout()\n\nAfter some minutes you must login again. A lot of servers logout automatically by a time. Also, you can clean emails: \n\n client.clean_emails()\n\nYou can set specify folder:\n\n client.clean_emails('inbox')\n\nAnother case, you can get all emails:\n\n emails, statuses = client.get_imails(folder='inbox')\n\nFor each emails, you get specify status. If take `zip(emails, statuses)`, you got pairs. You can set `EmailType`, \nfor example `UNSEEN`:\n\n emails, statuses = client.get_imails(email_typeEmailsTypes.UNSEEN, folder='inbox')\n\nThe same way, you can make SMTP client.\n\n## Testing\n\nIf we integration-test, we have some stages:\n\n* Data generation\n* Create objects\n* Testing\n* Validation\n* Clean\n\nIf we unit-test, we have some stages: \n\n* Create objects\n* Testing\n* Validation\n\nIn this way unit-test is partial case of integration test. We use unit-test for testing \nlogic in context one object, function (method). For example, we have function:\n\n def plus(a, b):\n return a + b\n\nThis is unit-test. We want to test simple object. This situation is not always possible. \nIf we want communication some systems and modules, we deal with integration tests. \nFor example, we test connect to data base and collect data from there. This is \nintegration-tests. \n\nAll tests lay down into folder:\n\n tests/\n\nIf you want to run tests, you can do this (all emails are deleted):\n\n ENV_FILE=.envs/my_envfile.env make test\n\nExample `test.env`:\n\n EMAIL_TIMEOUT_TEST=1.5 # Timeout for waiting between reading and writing of emails\n\n IMAP_HOST=imap.mail.ru\n IMAP_PORT=993\n SMTP_HOST=smtp.mail.ru\n SMTP_PORT=587\n\n EMAIL_LOGIN=my@email.ru\n EMAIL_PASSWORD=my_password\n\n\n### Emails (integration)\n\nWe have some clients for email:\n\n* SMTP-client sends emails\n* IMAP-client receives emails\n\nFor emails client we have not best way. We test SMTP-client over IMAP-client and IMAP-client\nover SMTP-client.\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/Flesspro/email-client", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "email-client", "package_url": "https://pypi.org/project/email-client/", "platform": "", "project_url": "https://pypi.org/project/email-client/", "project_urls": { "Homepage": "https://github.com/Flesspro/email-client" }, "release_url": "https://pypi.org/project/email-client/1.4.0/", "requires_dist": [ "table-test (==0.4.1)", "requests (==2.22.0)", "pytest (==5.0.1)", "python-dotenv (==0.10.3)" ], "requires_python": "", "summary": "Email clients for grader and other services of fless.pro", "version": "1.4.0" }, "last_serial": 5912689, "releases": { "1.0.0.2": [ { "comment_text": "", "digests": { "md5": "6471937079fe06665b6a41cd33006ece", "sha256": "36e42eb6b7df4d44f2dddb8d9a2b71c3c3c4bab236cc4c54da3e16ac4dce2ae6" }, "downloads": -1, "filename": "email_client-1.0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6471937079fe06665b6a41cd33006ece", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2145, "upload_time": "2019-09-22T08:59:31", "url": "https://files.pythonhosted.org/packages/fc/07/bbf1a1d21b96d7453a92381f94be7ea76c68d2e6112622258f9f28f192af/email_client-1.0.0.2-py3-none-any.whl" } ], "1.0.0.3": [ { "comment_text": "", "digests": { "md5": "08593cb6c5d180cc24383fa510a2d735", "sha256": "5323dec43198229277c7fc9408de6e61de81ec6b687962dfe4e97b2609473a1a" }, "downloads": -1, "filename": "email_client-1.0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "08593cb6c5d180cc24383fa510a2d735", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2123, "upload_time": "2019-09-22T09:39:30", "url": "https://files.pythonhosted.org/packages/49/06/7c767e6b4b7700cddd4be068147509a3657bd7a2685894410a28d08f1c7b/email_client-1.0.0.3-py3-none-any.whl" } ], "1.0.0.4": [ { "comment_text": "", "digests": { "md5": "c8d673b72e30d9598ddc2403d335a1bf", "sha256": "567cf59bd40083bb1d6028171400f76e3fa319f5f59b99f8372a78211b5dad16" }, "downloads": -1, "filename": "email_client-1.0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c8d673b72e30d9598ddc2403d335a1bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6782, "upload_time": "2019-09-22T09:55:21", "url": "https://files.pythonhosted.org/packages/5e/31/c5ee1f704bf05a885887c40e1c92534a4ef07ebdfb22548cbb83f7312aa2/email_client-1.0.0.4-py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "a49d125890f772a2540ed8fa5ef284ac", "sha256": "fe85eb73d280150691aa2383227ca858cfef8bcf19e492df646470bdff81f17d" }, "downloads": -1, "filename": "email_client-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a49d125890f772a2540ed8fa5ef284ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11520, "upload_time": "2019-09-22T12:12:03", "url": "https://files.pythonhosted.org/packages/df/df/d3472373b229158a6c39a90173382cdcbaa875754a512bb67b1c083ae092/email_client-1.1.0-py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "a40a3ef7b8b355b8968ab24c67ca796d", "sha256": "ddb2a8c4ee6c4034c7d2f7765d84362fd4628dc8b69af882878edf9c536b8582" }, "downloads": -1, "filename": "email_client-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a40a3ef7b8b355b8968ab24c67ca796d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6142, "upload_time": "2019-09-22T12:26:07", "url": "https://files.pythonhosted.org/packages/0b/41/d482b91170de052df58588706c1d81c0a187df13dc004802adfd37b1a48e/email_client-1.2.0-py3-none-any.whl" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "73e1f552cc044d7c2db39a489640c2bc", "sha256": "c3aeb2cd6bf59ea2e9a47a71a4080bd6cd03992d3e38fffcc5e3075f3ca197f7" }, "downloads": -1, "filename": "email_client-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "73e1f552cc044d7c2db39a489640c2bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6099, "upload_time": "2019-09-22T12:31:34", "url": "https://files.pythonhosted.org/packages/f2/58/19a4693ecf7571f1081fcc85808fbb76e998e4827d79bd0333fcb763f9a8/email_client-1.2.1-py3-none-any.whl" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "a936dd73afe9c0441d0aded323e5d9f4", "sha256": "c303d754295b2f8a65a67083896fb24d8535e209e40ac9e21d5557714e3baa68" }, "downloads": -1, "filename": "email_client-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a936dd73afe9c0441d0aded323e5d9f4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6878, "upload_time": "2019-09-25T18:27:22", "url": "https://files.pythonhosted.org/packages/eb/b0/ec3866d1b1b4b9a02b29043100d745a079b3189ba24999980dd15dfafd46/email_client-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f20fd96c5b744af9a3c238d024b1c2b", "sha256": "5ceed07afbf23800182be09bdb2fb978314000ca66266040fbd4de6da5f400b8" }, "downloads": -1, "filename": "email-client-1.3.2.tar.gz", "has_sig": false, "md5_digest": "0f20fd96c5b744af9a3c238d024b1c2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6464, "upload_time": "2019-09-25T19:21:44", "url": "https://files.pythonhosted.org/packages/fe/a4/5daef65f6463b05c4df4795590b7d5c0c012632f0fa0a49b6f7d9818b3c1/email-client-1.3.2.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "fa8c1413b310010e342da1242cdc14f7", "sha256": "45bc675a0b0f9ffa437e9fb296d7beecb321aca54caac0db947c4fbf5a1d1e85" }, "downloads": -1, "filename": "email_client-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fa8c1413b310010e342da1242cdc14f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6884, "upload_time": "2019-10-01T14:35:47", "url": "https://files.pythonhosted.org/packages/9d/2a/9ec7e4d3a3583146f708b90f132564974066770ee7024fe847eb15d992da/email_client-1.4.0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fa8c1413b310010e342da1242cdc14f7", "sha256": "45bc675a0b0f9ffa437e9fb296d7beecb321aca54caac0db947c4fbf5a1d1e85" }, "downloads": -1, "filename": "email_client-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fa8c1413b310010e342da1242cdc14f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6884, "upload_time": "2019-10-01T14:35:47", "url": "https://files.pythonhosted.org/packages/9d/2a/9ec7e4d3a3583146f708b90f132564974066770ee7024fe847eb15d992da/email_client-1.4.0-py3-none-any.whl" } ] }