2023-09-30T21:17:33,251 Created temporary directory: /tmp/pip-build-tracker-hf4tlnk5 2023-09-30T21:17:33,252 Initialized build tracking at /tmp/pip-build-tracker-hf4tlnk5 2023-09-30T21:17:33,253 Created build tracker: /tmp/pip-build-tracker-hf4tlnk5 2023-09-30T21:17:33,253 Entered build tracker: /tmp/pip-build-tracker-hf4tlnk5 2023-09-30T21:17:33,254 Created temporary directory: /tmp/pip-wheel-lqw2z2nz 2023-09-30T21:17:33,257 Created temporary directory: /tmp/pip-ephem-wheel-cache-fnz5s1tn 2023-09-30T21:17:33,278 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-09-30T21:17:33,282 2 location(s) to search for versions of mbox2m365: 2023-09-30T21:17:33,282 * https://pypi.org/simple/mbox2m365/ 2023-09-30T21:17:33,282 * https://www.piwheels.org/simple/mbox2m365/ 2023-09-30T21:17:33,282 Fetching project page and analyzing links: https://pypi.org/simple/mbox2m365/ 2023-09-30T21:17:33,283 Getting page https://pypi.org/simple/mbox2m365/ 2023-09-30T21:17:33,285 Found index url https://pypi.org/simple/ 2023-09-30T21:17:33,544 Fetched page https://pypi.org/simple/mbox2m365/ as application/vnd.pypi.simple.v1+json 2023-09-30T21:17:33,547 Found link https://files.pythonhosted.org/packages/6c/31/171401930c8923f943a1ea671a726209113bdb0759b36af9716eb61eaa12/mbox2m365-3.0.6.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.6 2023-09-30T21:17:33,547 Found link https://files.pythonhosted.org/packages/93/dd/07f5465ee90fb81b7f6df237ecb0abefefecf0c984adef70730493503804/mbox2m365-3.0.8.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.8 2023-09-30T21:17:33,548 Found link https://files.pythonhosted.org/packages/7f/96/ebd03ef2d3be45b7fcdcbf603cfe23fcbd4db15135dd4d9a1dd7b389281e/mbox2m365-3.0.10.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.10 2023-09-30T21:17:33,549 Found link https://files.pythonhosted.org/packages/4d/6a/5547755d2f0ffd2898dfea194692fa316f3ae928e023c53e68180ba014d0/mbox2m365-3.0.12.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.12 2023-09-30T21:17:33,549 Found link https://files.pythonhosted.org/packages/24/48/5765400ed318e16ce6a1f901a7e1e39efe14da6f6e16baba3bc7970f5be4/mbox2m365-3.0.14.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.14 2023-09-30T21:17:33,550 Found link https://files.pythonhosted.org/packages/65/c6/9490d087c5f5c65e12e7a9c483c2fe53ac3d9a6cb1491d4295908f889867/mbox2m365-3.0.16.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.0.16 2023-09-30T21:17:33,551 Found link https://files.pythonhosted.org/packages/45/69/737b97ff918c42a5455925b30d09ef252a748326e6922bf78e381a52caea/mbox2m365-3.2.0.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.2.0 2023-09-30T21:17:33,551 Found link https://files.pythonhosted.org/packages/11/b0/397a19c669eeba5cbec56451f96a165eda933d2b3167a97ad66b4a846983/mbox2m365-3.2.2.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.2.2 2023-09-30T21:17:33,552 Found link https://files.pythonhosted.org/packages/2e/16/1f73fbaefeb6ce71083fe24e037d0aa708d3d68f4ee1492d717195ed1e39/mbox2m365-3.2.6.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.2.6 2023-09-30T21:17:33,553 Fetching project page and analyzing links: https://www.piwheels.org/simple/mbox2m365/ 2023-09-30T21:17:33,553 Getting page https://www.piwheels.org/simple/mbox2m365/ 2023-09-30T21:17:33,555 Found index url https://www.piwheels.org/simple/ 2023-09-30T21:17:33,728 Fetched page https://www.piwheels.org/simple/mbox2m365/ as text/html 2023-09-30T21:17:33,730 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.2.2-py3-none-any.whl#sha256=8314ec8f9da584427181cbe833e7f5e65fc59853f92b7a2981195fd7d067cdf1 (from https://www.piwheels.org/simple/mbox2m365/) 2023-09-30T21:17:33,731 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.2.0-py3-none-any.whl#sha256=02fe06096835ddba745923b0bd1ad6eaff5c54fe01c2414c1e1d8b6d6fc87f9b (from https://www.piwheels.org/simple/mbox2m365/) 2023-09-30T21:17:33,731 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.0.16-py3-none-any.whl#sha256=568f57fcd89807e61a8fc09c23259f313f8d280c51b7a18ebd42ed73fecfd38c (from https://www.piwheels.org/simple/mbox2m365/) 2023-09-30T21:17:33,732 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.0.14-py3-none-any.whl#sha256=63fec01e1f79300cc926e7d89e60e23181f7209ee44f7f69d109591b67548b0e (from https://www.piwheels.org/simple/mbox2m365/) 2023-09-30T21:17:33,733 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.0.12-py3-none-any.whl#sha256=11f16b89a6d1dd91415a578920301907c064002e897d0bf22ded4af66a001441 (from https://www.piwheels.org/simple/mbox2m365/) 2023-09-30T21:17:33,734 Skipping link: not a file: https://www.piwheels.org/simple/mbox2m365/ 2023-09-30T21:17:33,734 Skipping link: not a file: https://pypi.org/simple/mbox2m365/ 2023-09-30T21:17:33,753 Given no hashes to check 1 links for project 'mbox2m365': discarding no candidates 2023-09-30T21:17:33,771 Collecting mbox2m365==3.2.6 2023-09-30T21:17:33,773 Created temporary directory: /tmp/pip-unpack-75lsy_1j 2023-09-30T21:17:33,989 Downloading mbox2m365-3.2.6.tar.gz (23 kB) 2023-09-30T21:17:34,037 Added mbox2m365==3.2.6 from https://files.pythonhosted.org/packages/2e/16/1f73fbaefeb6ce71083fe24e037d0aa708d3d68f4ee1492d717195ed1e39/mbox2m365-3.2.6.tar.gz to build tracker '/tmp/pip-build-tracker-hf4tlnk5' 2023-09-30T21:17:34,041 Created temporary directory: /tmp/pip-build-env-ovz5e6eo 2023-09-30T21:17:34,046 Installing build dependencies: started 2023-09-30T21:17:34,047 Running command pip subprocess to install build dependencies 2023-09-30T21:17:35,657 Using pip 23.2.1 from /usr/local/lib/python3.11/dist-packages/pip (python 3.11) 2023-09-30T21:17:36,393 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-09-30T21:17:38,002 Collecting setuptools>=42 2023-09-30T21:17:38,063 Using cached https://www.piwheels.org/simple/setuptools/setuptools-68.2.2-py3-none-any.whl (807 kB) 2023-09-30T21:17:38,296 Collecting wheel 2023-09-30T21:17:38,311 Using cached https://www.piwheels.org/simple/wheel/wheel-0.41.2-py3-none-any.whl (64 kB) 2023-09-30T21:17:40,910 Installing collected packages: wheel, setuptools 2023-09-30T21:17:41,133 Creating /tmp/pip-build-env-ovz5e6eo/overlay/local/bin 2023-09-30T21:17:41,135 changing mode of /tmp/pip-build-env-ovz5e6eo/overlay/local/bin/wheel to 755 2023-09-30T21:17:43,402 Successfully installed setuptools-68.2.2 wheel-0.41.2 2023-09-30T21:17:43,939 Installing build dependencies: finished with status 'done' 2023-09-30T21:17:43,942 Getting requirements to build wheel: started 2023-09-30T21:17:43,944 Running command Getting requirements to build wheel 2023-09-30T21:17:44,503 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,503 !! 2023-09-30T21:17:44,504 ******************************************************************************** 2023-09-30T21:17:44,505 ########################################################################## 2023-09-30T21:17:44,505 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,506 ########################################################################## 2023-09-30T21:17:44,507 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,508 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-09-30T21:17:44,509 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,510 consider this value unless `description` is listed as `dynamic`. 2023-09-30T21:17:44,511 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,512 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,513 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,513 follow strictly the standard. 2023-09-30T21:17:44,514 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-09-30T21:17:44,514 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,515 configuration. 2023-09-30T21:17:44,516 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,516 or your builds will no longer be supported. 2023-09-30T21:17:44,517 ******************************************************************************** 2023-09-30T21:17:44,518 !! 2023-09-30T21:17:44,518 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,519 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,519 !! 2023-09-30T21:17:44,520 ******************************************************************************** 2023-09-30T21:17:44,520 ########################################################################## 2023-09-30T21:17:44,521 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,521 ########################################################################## 2023-09-30T21:17:44,522 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,524 `readme = '# Abstract\n\nThis repository contains a simple python script that (1) processes an\n`mbox` style mailbox file, (2) parses out (typically) the last message\nand then (3) re-transmits this using the CLI `m365` toolset. While this\nscript can be used in a completely stand-alone manner to extract a\nmessage from an `mbox` and then *send* using `m365`, it’s main utility\nis when used in a full ecosystem including an email client and `postfix`\nserver.\n\nThe CLI `m365` offers the ability to use Outlook/Office365 to send\nemails. However, this tool is not suited to use as a mail client\u2009—\u2009it\nmerely offers a means to transmit a message from the command line. More\nuseful would be if existing mail clients could leverage `m365` natively.\nCurrently, however, this is not available. Therefore, `mbox2m365` was\ncreated to complete a "missing link" in a full email experience. Using\nthis tool in a configured environment, it is now possible to use *any*\nemail client to transmit messages using Outlook/Office365.\n\n# TL;DR\n\nEven if you’re impatient, it’s a good idea to read this document.\nHowever, assuming you’ve already built the infrastructure, assuming you\nhave installed `m365` (and logged into your Institution from `m365`),\nhave assuming you have setup your email client to email to a dummy local\npostfix account, then you can install `mbox2m365` with a simple\n\n``` bash\npip install mbox2m365\n```\n\nnote at time of writing the PyPI install might not be available. In that\ncase, simply clone this repo and do a\n\n``` bash\n# From the repo root dir\npip install -U .\n```\n\nand fire it off by setting up the monitor on the `mbox` file (here we\nassume the mbox belongs to `rudolph`)\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n(Clearly the above relies on [`entr`](https://github.com/eradman/entr).\nConsult your distro’s repos for the appropriate install. In arch, this\nis `yay -S entr`, in Ubuntu, this is `sudo apt install entr`)\n\n# Security alert!\n\nWait! **Danger, Will Robinson**! Doesn’t this violate security policies?\nI was told my Institution does *not* allow clients like thunderbird to\nconnect to the Outlook server to send emails!\n\nWell, the devil is in the details as the saying goes. This solution does\n*not* violate policy since the "unauthenticated" email client is *not*\never connecting/authenticating to the Outlook server. Rather, the\n"unauthenticated" email client sends messages to a specially configured\nserver that "saves" the emails to a file. Then, a separate program\nteases out the new arrivals and uses the **authenticated** `m365`\nprogram to actually talk to and leverage Outlook to send the email. This\n*separate program* that bridges the mail file to `m365` is none other\nthan this python module.\n\nSo to be pendantic: all credentialing and authentication is handled by\n`m365` and *not* this tool. The end user is still required to\nlogin/authenticate using `m365`. If this has not happened, then\n`mbox2m365` will not work.\n\nAgain, this repo contains **no** authentication tokens/passwords/etc.\n\n# Limitations\n\nLet’s get these out of the way first. This is *not* a full solution for\nlinking a third party email client to Outlook. It gets *close*, IMHO.\nThe limitations are:\n\n- This is not a multi-user solution. All email transmitted to the\n intermediate helper server is added to a single user `mbox` which when\n processed by this script means **all** email in that `mbox` will\n appear to have been transmitted by that user. While in theory it\n should be possible to support multiple users, either by having a\n separate helper server per user or by having multiple local users on\n the mail server and separate `mbox` files, the current solution is\n clearly not scalable. It is decent though for the single user case.\n\n- Fundmanentally, this solution is limited first and foremost by the\n capabilities of the CLI `m365 outlook mail send` functionality. Recent\n updates to `m365` have expanded functionality of this bridge\u2009—\u2009most\n notably attachments are now supported. Still pending is full `bcc`\n support\u2009—\u2009currently all `bcc` recipients are switched to `cc`.\n\nOther limitations stem from the fact the bridge needs to process the\n`mbox` file *de novo* each time mail is received by the helper server.\nThis means that time to process will increase linearly with `mbox` size.\nThe real world implications of this are still being explored.\n\nFinally, the bridge does make a best effort attempt to *wait* until the\n`mbox` has stabilized before analyzing it. When sending emails to\nmultiple recipients, *each* recipient gets a single complete copy in the\n`mbox` with a single address (the multiple recipient addresses are not\nconserved in the `mbox` but *are* processed by this bridge). While\narguably wasteful, the implication is that while all these recipient\ncopies are appended to the `mbox`, the bridge should wait until all have\nbeen added before processing. Currently the bridge attempts this by\nexamining the `mbox` file size when called, and waiting a small delta\ntime interval and checking if the size has changed again. It will wait\nuntil the size is stable before continuing. The TL;DR is this could\nresult in a processing delay.\n\n# Introduction\n\nThe migration/adoption of Office365 by institutions often poses issues\nand problems for users wishing to use different tools for email\ntransmission, particularly on platforms such as Linux.\n\nWhile it is possible to access various Office365 applications,\nparticularly Outlook, via a web interface, this is often not sufficient\nfor several classes of users, particularly those who find the web\ninterface cumbersome (for instance, the web interface has no (or\nlimited) support for keyboard shortcuts, it is cumbersome if not\nimpossible to automate tasks involving event-driven email) and/or for\nusers who have an existing and efficient email workflow using clients\nsuch as `thunderbird` or `mutt`.\n\nThis small repo houses a small and simple python application with some\nsupporting documentation that provides a solution to the problem of\nsending email from an instituion’s managed domain by leveraging\n`postfix` and some `mbox` processing and then using the CLI tool `m365`.\n\n# Method Summary\n\nThe solution requires some seemingly contortuous steps, but in reality\nis rather simple and can be summarized as follows:\n\n## Reading email\n\nReading emails that are locked away in an Outlook server is best\neffected by simply adding a forward incoming email rule from your\nInstitution Outlook Server (IOS) to an externally accessible email\nprovider (such as `gmail`), allowing this email to be read easily by\ntools such as `thunderbird` or `mutt`.\n\n ┌─────────────────────────────────┐\n │IOS that receives incoming email │\n └┬────────────────────────────────┘\n │\n └─────┐\n │\n ┌O─────────────────────┐\n │forwardRule()│\n └┬─────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │gmail│\n └┬────┘\n └─────┐\n │\n ┌O──────────────────────┐\n │clientAccess()│\n └O──────────────────────┘\n ┌─────┘\n │\n ┌┴───────────────────────┐\n │thunderbird / mutt / etc│\n └────────────────────────┘\n\n## Sending email\n\nThe message is now outside of Outlook, and if the Institution does not\nallow non-authorized clients (often this means they only allow Microsoft\ntools) to connect to the Outlook server, the following work around will\nhelp. Essentially, the outside client should be configured to send email\nusing a properly setup `postfix` server that simply copies the target\nemail to an `mbox` file.\n\nThis `mbox` file is then monitored for any changes, and on a change\n(assumed to mean a new email message has been appended), a new process\nis fired off to parse off the latest message and then use the command\nline `m365` CLI tool to have the IOS send the email.\n\n ┌───────────────────────┐\n │thundebird / mutt /etc │\n └┬──────────────────────┘\n │\n └─────┐\n │\n ┌O────────────────────────────┐\n │sendmail() (postfix)│\n └┬────────────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │mbox │\n └┬────┘\n └─────┐\n │\n ┌O────────┐\n │mbox2m365│ <--- this repo!\n └┬────────┘\n ┌─────┘\n │\n ┌O─────────────┐\n │m365 │\n └┬─────────────┘\n │\n ┌O────────────────────────────────┐\n │IOS that transmits outgoing email│\n └─────────────────────────────────┘\n\n# `mbox2m365`\n\nWhile all the building blocks to effect the solution exist, the one\nmissing piece is the `mbox` to `m365` block, which is provided for by\nthis rather simple python script.\n\n# Setup your helper mail server, `postfix`\n\nFirst, install `postfix`\n\n## Arch\n\n``` bash\nyay -S postfix\n```\n\n## Ubuntu\n\n``` bash\nsudo apt install postfix\n```\n\n# `transport`\n\nNow, edit the `transport` file.\n\n``` bash\nsudo bash\ncd /etc/postfix\ncp transport transport.orig\necho "* local:rudolph" >> transport\n```\n\n# `main.cf`\n\nFor the `main.cf` file, do\n\n``` bash\n# Assuming you are still in the /etc/postfix dir in a sudo bash shell...\ncp main.cf main.cf.orig\necho "mydomain = pangea.net" >> main.cf\necho "luser_relay = rudolph@pangea.net"\necho "transport_maps = hash:/etc/postfix/transport" >> main.cf\n```\n\n# enable/restart the services\n\n``` bash\nsudo systemctl enable postfix.service\nsudo systemctl restart postfix.service\n```\n\n# Email client\n\nSimply configure your email client to use the machine running `postfix`\nas your email server. All emails will be appended to the `transport`\nuser’s `mbox` file.\n\n# Fire up `mbox2m365`\n\nThe final piece of the puzzle:\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n*-30-*\n'` 2023-09-30T21:17:44,526 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,527 consider this value unless `readme` is listed as `dynamic`. 2023-09-30T21:17:44,528 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,529 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,530 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,530 follow strictly the standard. 2023-09-30T21:17:44,532 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-09-30T21:17:44,532 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,533 configuration. 2023-09-30T21:17:44,534 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,535 or your builds will no longer be supported. 2023-09-30T21:17:44,535 ******************************************************************************** 2023-09-30T21:17:44,536 !! 2023-09-30T21:17:44,537 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,537 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,538 !! 2023-09-30T21:17:44,539 ******************************************************************************** 2023-09-30T21:17:44,540 ########################################################################## 2023-09-30T21:17:44,541 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,541 ########################################################################## 2023-09-30T21:17:44,543 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,544 `license = 'MIT'` 2023-09-30T21:17:44,545 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,545 consider this value unless `license` is listed as `dynamic`. 2023-09-30T21:17:44,546 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,547 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,549 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,549 follow strictly the standard. 2023-09-30T21:17:44,551 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-09-30T21:17:44,551 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,552 configuration. 2023-09-30T21:17:44,553 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,553 or your builds will no longer be supported. 2023-09-30T21:17:44,554 ******************************************************************************** 2023-09-30T21:17:44,556 !! 2023-09-30T21:17:44,556 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,557 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,557 !! 2023-09-30T21:17:44,558 ******************************************************************************** 2023-09-30T21:17:44,558 ########################################################################## 2023-09-30T21:17:44,559 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,559 ########################################################################## 2023-09-30T21:17:44,560 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,561 `authors = 'Rudolph Pienaar'` 2023-09-30T21:17:44,562 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,563 consider this value unless `authors` is listed as `dynamic`. 2023-09-30T21:17:44,563 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,564 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,565 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,565 follow strictly the standard. 2023-09-30T21:17:44,566 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-09-30T21:17:44,567 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,567 configuration. 2023-09-30T21:17:44,568 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,569 or your builds will no longer be supported. 2023-09-30T21:17:44,569 ******************************************************************************** 2023-09-30T21:17:44,570 !! 2023-09-30T21:17:44,571 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,572 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,572 !! 2023-09-30T21:17:44,573 ******************************************************************************** 2023-09-30T21:17:44,574 ########################################################################## 2023-09-30T21:17:44,574 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,575 ########################################################################## 2023-09-30T21:17:44,576 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,577 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-09-30T21:17:44,578 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,578 consider this value unless `scripts` is listed as `dynamic`. 2023-09-30T21:17:44,579 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,580 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,581 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,582 follow strictly the standard. 2023-09-30T21:17:44,583 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-09-30T21:17:44,584 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,584 configuration. 2023-09-30T21:17:44,585 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,585 or your builds will no longer be supported. 2023-09-30T21:17:44,586 ******************************************************************************** 2023-09-30T21:17:44,587 !! 2023-09-30T21:17:44,587 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,587 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:44,588 !! 2023-09-30T21:17:44,589 ******************************************************************************** 2023-09-30T21:17:44,589 ########################################################################## 2023-09-30T21:17:44,590 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:44,590 ########################################################################## 2023-09-30T21:17:44,591 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:44,592 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-09-30T21:17:44,593 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:44,593 consider this value unless `dependencies` is listed as `dynamic`. 2023-09-30T21:17:44,594 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:44,595 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:44,596 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:44,596 follow strictly the standard. 2023-09-30T21:17:44,597 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-09-30T21:17:44,598 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:44,598 configuration. 2023-09-30T21:17:44,599 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:44,600 or your builds will no longer be supported. 2023-09-30T21:17:44,600 ******************************************************************************** 2023-09-30T21:17:44,601 !! 2023-09-30T21:17:44,602 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:44,816 running egg_info 2023-09-30T21:17:44,820 writing mbox2m365.egg-info/PKG-INFO 2023-09-30T21:17:44,824 writing dependency_links to mbox2m365.egg-info/dependency_links.txt 2023-09-30T21:17:44,826 writing entry points to mbox2m365.egg-info/entry_points.txt 2023-09-30T21:17:44,827 writing requirements to mbox2m365.egg-info/requires.txt 2023-09-30T21:17:44,828 writing top-level names to mbox2m365.egg-info/top_level.txt 2023-09-30T21:17:44,843 reading manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:44,845 reading manifest template 'MANIFEST.in' 2023-09-30T21:17:44,847 adding license file 'LICENSE' 2023-09-30T21:17:44,848 writing manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:44,966 Getting requirements to build wheel: finished with status 'done' 2023-09-30T21:17:44,977 Created temporary directory: /tmp/pip-modern-metadata-0ua7sed7 2023-09-30T21:17:44,979 Preparing metadata (pyproject.toml): started 2023-09-30T21:17:44,980 Running command Preparing metadata (pyproject.toml) 2023-09-30T21:17:45,462 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,462 !! 2023-09-30T21:17:45,464 ******************************************************************************** 2023-09-30T21:17:45,464 ########################################################################## 2023-09-30T21:17:45,464 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,465 ########################################################################## 2023-09-30T21:17:45,466 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,467 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-09-30T21:17:45,468 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,468 consider this value unless `description` is listed as `dynamic`. 2023-09-30T21:17:45,469 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,470 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,470 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,471 follow strictly the standard. 2023-09-30T21:17:45,472 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-09-30T21:17:45,472 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,473 configuration. 2023-09-30T21:17:45,473 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,474 or your builds will no longer be supported. 2023-09-30T21:17:45,474 ******************************************************************************** 2023-09-30T21:17:45,475 !! 2023-09-30T21:17:45,476 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,476 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,477 !! 2023-09-30T21:17:45,478 ******************************************************************************** 2023-09-30T21:17:45,479 ########################################################################## 2023-09-30T21:17:45,479 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,479 ########################################################################## 2023-09-30T21:17:45,480 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,482 `readme = '# Abstract\n\nThis repository contains a simple python script that (1) processes an\n`mbox` style mailbox file, (2) parses out (typically) the last message\nand then (3) re-transmits this using the CLI `m365` toolset. While this\nscript can be used in a completely stand-alone manner to extract a\nmessage from an `mbox` and then *send* using `m365`, it’s main utility\nis when used in a full ecosystem including an email client and `postfix`\nserver.\n\nThe CLI `m365` offers the ability to use Outlook/Office365 to send\nemails. However, this tool is not suited to use as a mail client\u2009—\u2009it\nmerely offers a means to transmit a message from the command line. More\nuseful would be if existing mail clients could leverage `m365` natively.\nCurrently, however, this is not available. Therefore, `mbox2m365` was\ncreated to complete a "missing link" in a full email experience. Using\nthis tool in a configured environment, it is now possible to use *any*\nemail client to transmit messages using Outlook/Office365.\n\n# TL;DR\n\nEven if you’re impatient, it’s a good idea to read this document.\nHowever, assuming you’ve already built the infrastructure, assuming you\nhave installed `m365` (and logged into your Institution from `m365`),\nhave assuming you have setup your email client to email to a dummy local\npostfix account, then you can install `mbox2m365` with a simple\n\n``` bash\npip install mbox2m365\n```\n\nnote at time of writing the PyPI install might not be available. In that\ncase, simply clone this repo and do a\n\n``` bash\n# From the repo root dir\npip install -U .\n```\n\nand fire it off by setting up the monitor on the `mbox` file (here we\nassume the mbox belongs to `rudolph`)\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n(Clearly the above relies on [`entr`](https://github.com/eradman/entr).\nConsult your distro’s repos for the appropriate install. In arch, this\nis `yay -S entr`, in Ubuntu, this is `sudo apt install entr`)\n\n# Security alert!\n\nWait! **Danger, Will Robinson**! Doesn’t this violate security policies?\nI was told my Institution does *not* allow clients like thunderbird to\nconnect to the Outlook server to send emails!\n\nWell, the devil is in the details as the saying goes. This solution does\n*not* violate policy since the "unauthenticated" email client is *not*\never connecting/authenticating to the Outlook server. Rather, the\n"unauthenticated" email client sends messages to a specially configured\nserver that "saves" the emails to a file. Then, a separate program\nteases out the new arrivals and uses the **authenticated** `m365`\nprogram to actually talk to and leverage Outlook to send the email. This\n*separate program* that bridges the mail file to `m365` is none other\nthan this python module.\n\nSo to be pendantic: all credentialing and authentication is handled by\n`m365` and *not* this tool. The end user is still required to\nlogin/authenticate using `m365`. If this has not happened, then\n`mbox2m365` will not work.\n\nAgain, this repo contains **no** authentication tokens/passwords/etc.\n\n# Limitations\n\nLet’s get these out of the way first. This is *not* a full solution for\nlinking a third party email client to Outlook. It gets *close*, IMHO.\nThe limitations are:\n\n- This is not a multi-user solution. All email transmitted to the\n intermediate helper server is added to a single user `mbox` which when\n processed by this script means **all** email in that `mbox` will\n appear to have been transmitted by that user. While in theory it\n should be possible to support multiple users, either by having a\n separate helper server per user or by having multiple local users on\n the mail server and separate `mbox` files, the current solution is\n clearly not scalable. It is decent though for the single user case.\n\n- Fundmanentally, this solution is limited first and foremost by the\n capabilities of the CLI `m365 outlook mail send` functionality. Recent\n updates to `m365` have expanded functionality of this bridge\u2009—\u2009most\n notably attachments are now supported. Still pending is full `bcc`\n support\u2009—\u2009currently all `bcc` recipients are switched to `cc`.\n\nOther limitations stem from the fact the bridge needs to process the\n`mbox` file *de novo* each time mail is received by the helper server.\nThis means that time to process will increase linearly with `mbox` size.\nThe real world implications of this are still being explored.\n\nFinally, the bridge does make a best effort attempt to *wait* until the\n`mbox` has stabilized before analyzing it. When sending emails to\nmultiple recipients, *each* recipient gets a single complete copy in the\n`mbox` with a single address (the multiple recipient addresses are not\nconserved in the `mbox` but *are* processed by this bridge). While\narguably wasteful, the implication is that while all these recipient\ncopies are appended to the `mbox`, the bridge should wait until all have\nbeen added before processing. Currently the bridge attempts this by\nexamining the `mbox` file size when called, and waiting a small delta\ntime interval and checking if the size has changed again. It will wait\nuntil the size is stable before continuing. The TL;DR is this could\nresult in a processing delay.\n\n# Introduction\n\nThe migration/adoption of Office365 by institutions often poses issues\nand problems for users wishing to use different tools for email\ntransmission, particularly on platforms such as Linux.\n\nWhile it is possible to access various Office365 applications,\nparticularly Outlook, via a web interface, this is often not sufficient\nfor several classes of users, particularly those who find the web\ninterface cumbersome (for instance, the web interface has no (or\nlimited) support for keyboard shortcuts, it is cumbersome if not\nimpossible to automate tasks involving event-driven email) and/or for\nusers who have an existing and efficient email workflow using clients\nsuch as `thunderbird` or `mutt`.\n\nThis small repo houses a small and simple python application with some\nsupporting documentation that provides a solution to the problem of\nsending email from an instituion’s managed domain by leveraging\n`postfix` and some `mbox` processing and then using the CLI tool `m365`.\n\n# Method Summary\n\nThe solution requires some seemingly contortuous steps, but in reality\nis rather simple and can be summarized as follows:\n\n## Reading email\n\nReading emails that are locked away in an Outlook server is best\neffected by simply adding a forward incoming email rule from your\nInstitution Outlook Server (IOS) to an externally accessible email\nprovider (such as `gmail`), allowing this email to be read easily by\ntools such as `thunderbird` or `mutt`.\n\n ┌─────────────────────────────────┐\n │IOS that receives incoming email │\n └┬────────────────────────────────┘\n │\n └─────┐\n │\n ┌O─────────────────────┐\n │forwardRule()│\n └┬─────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │gmail│\n └┬────┘\n └─────┐\n │\n ┌O──────────────────────┐\n │clientAccess()│\n └O──────────────────────┘\n ┌─────┘\n │\n ┌┴───────────────────────┐\n │thunderbird / mutt / etc│\n └────────────────────────┘\n\n## Sending email\n\nThe message is now outside of Outlook, and if the Institution does not\nallow non-authorized clients (often this means they only allow Microsoft\ntools) to connect to the Outlook server, the following work around will\nhelp. Essentially, the outside client should be configured to send email\nusing a properly setup `postfix` server that simply copies the target\nemail to an `mbox` file.\n\nThis `mbox` file is then monitored for any changes, and on a change\n(assumed to mean a new email message has been appended), a new process\nis fired off to parse off the latest message and then use the command\nline `m365` CLI tool to have the IOS send the email.\n\n ┌───────────────────────┐\n │thundebird / mutt /etc │\n └┬──────────────────────┘\n │\n └─────┐\n │\n ┌O────────────────────────────┐\n │sendmail() (postfix)│\n └┬────────────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │mbox │\n └┬────┘\n └─────┐\n │\n ┌O────────┐\n │mbox2m365│ <--- this repo!\n └┬────────┘\n ┌─────┘\n │\n ┌O─────────────┐\n │m365 │\n └┬─────────────┘\n │\n ┌O────────────────────────────────┐\n │IOS that transmits outgoing email│\n └─────────────────────────────────┘\n\n# `mbox2m365`\n\nWhile all the building blocks to effect the solution exist, the one\nmissing piece is the `mbox` to `m365` block, which is provided for by\nthis rather simple python script.\n\n# Setup your helper mail server, `postfix`\n\nFirst, install `postfix`\n\n## Arch\n\n``` bash\nyay -S postfix\n```\n\n## Ubuntu\n\n``` bash\nsudo apt install postfix\n```\n\n# `transport`\n\nNow, edit the `transport` file.\n\n``` bash\nsudo bash\ncd /etc/postfix\ncp transport transport.orig\necho "* local:rudolph" >> transport\n```\n\n# `main.cf`\n\nFor the `main.cf` file, do\n\n``` bash\n# Assuming you are still in the /etc/postfix dir in a sudo bash shell...\ncp main.cf main.cf.orig\necho "mydomain = pangea.net" >> main.cf\necho "luser_relay = rudolph@pangea.net"\necho "transport_maps = hash:/etc/postfix/transport" >> main.cf\n```\n\n# enable/restart the services\n\n``` bash\nsudo systemctl enable postfix.service\nsudo systemctl restart postfix.service\n```\n\n# Email client\n\nSimply configure your email client to use the machine running `postfix`\nas your email server. All emails will be appended to the `transport`\nuser’s `mbox` file.\n\n# Fire up `mbox2m365`\n\nThe final piece of the puzzle:\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n*-30-*\n'` 2023-09-30T21:17:45,483 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,483 consider this value unless `readme` is listed as `dynamic`. 2023-09-30T21:17:45,484 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,486 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,486 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,487 follow strictly the standard. 2023-09-30T21:17:45,488 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-09-30T21:17:45,488 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,489 configuration. 2023-09-30T21:17:45,490 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,490 or your builds will no longer be supported. 2023-09-30T21:17:45,491 ******************************************************************************** 2023-09-30T21:17:45,492 !! 2023-09-30T21:17:45,492 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,493 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,493 !! 2023-09-30T21:17:45,494 ******************************************************************************** 2023-09-30T21:17:45,495 ########################################################################## 2023-09-30T21:17:45,495 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,496 ########################################################################## 2023-09-30T21:17:45,497 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,498 `license = 'MIT'` 2023-09-30T21:17:45,499 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,500 consider this value unless `license` is listed as `dynamic`. 2023-09-30T21:17:45,500 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,501 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,502 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,502 follow strictly the standard. 2023-09-30T21:17:45,503 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-09-30T21:17:45,504 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,504 configuration. 2023-09-30T21:17:45,505 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,506 or your builds will no longer be supported. 2023-09-30T21:17:45,506 ******************************************************************************** 2023-09-30T21:17:45,507 !! 2023-09-30T21:17:45,507 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,508 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,508 !! 2023-09-30T21:17:45,509 ******************************************************************************** 2023-09-30T21:17:45,510 ########################################################################## 2023-09-30T21:17:45,511 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,511 ########################################################################## 2023-09-30T21:17:45,512 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,514 `authors = 'Rudolph Pienaar'` 2023-09-30T21:17:45,516 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,517 consider this value unless `authors` is listed as `dynamic`. 2023-09-30T21:17:45,518 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,519 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,520 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,520 follow strictly the standard. 2023-09-30T21:17:45,521 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-09-30T21:17:45,522 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,522 configuration. 2023-09-30T21:17:45,523 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,524 or your builds will no longer be supported. 2023-09-30T21:17:45,524 ******************************************************************************** 2023-09-30T21:17:45,525 !! 2023-09-30T21:17:45,526 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,527 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,527 !! 2023-09-30T21:17:45,528 ******************************************************************************** 2023-09-30T21:17:45,529 ########################################################################## 2023-09-30T21:17:45,529 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,530 ########################################################################## 2023-09-30T21:17:45,531 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,532 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-09-30T21:17:45,533 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,533 consider this value unless `scripts` is listed as `dynamic`. 2023-09-30T21:17:45,534 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,535 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,535 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,536 follow strictly the standard. 2023-09-30T21:17:45,537 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-09-30T21:17:45,537 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,537 configuration. 2023-09-30T21:17:45,538 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,539 or your builds will no longer be supported. 2023-09-30T21:17:45,539 ******************************************************************************** 2023-09-30T21:17:45,540 !! 2023-09-30T21:17:45,540 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,541 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:45,541 !! 2023-09-30T21:17:45,543 ******************************************************************************** 2023-09-30T21:17:45,543 ########################################################################## 2023-09-30T21:17:45,544 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:45,544 ########################################################################## 2023-09-30T21:17:45,545 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:45,547 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-09-30T21:17:45,548 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:45,548 consider this value unless `dependencies` is listed as `dynamic`. 2023-09-30T21:17:45,549 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:45,550 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:45,551 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:45,551 follow strictly the standard. 2023-09-30T21:17:45,553 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-09-30T21:17:45,553 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:45,553 configuration. 2023-09-30T21:17:45,554 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:45,555 or your builds will no longer be supported. 2023-09-30T21:17:45,555 ******************************************************************************** 2023-09-30T21:17:45,557 !! 2023-09-30T21:17:45,557 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:45,765 running dist_info 2023-09-30T21:17:45,770 creating /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info 2023-09-30T21:17:45,774 writing /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/PKG-INFO 2023-09-30T21:17:45,777 writing dependency_links to /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/dependency_links.txt 2023-09-30T21:17:45,779 writing entry points to /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/entry_points.txt 2023-09-30T21:17:45,780 writing requirements to /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/requires.txt 2023-09-30T21:17:45,781 writing top-level names to /tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/top_level.txt 2023-09-30T21:17:45,783 writing manifest file '/tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:45,795 reading manifest file '/tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:45,797 reading manifest template 'MANIFEST.in' 2023-09-30T21:17:45,798 adding license file 'LICENSE' 2023-09-30T21:17:45,799 writing manifest file '/tmp/pip-modern-metadata-0ua7sed7/mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:45,800 creating '/tmp/pip-modern-metadata-0ua7sed7/mbox2m365-3.2.6.dist-info' 2023-09-30T21:17:45,951 Preparing metadata (pyproject.toml): finished with status 'done' 2023-09-30T21:17:45,956 Source in /tmp/pip-wheel-lqw2z2nz/mbox2m365_8a8256e667534d468a0841f581d28185 has version 3.2.6, which satisfies requirement mbox2m365==3.2.6 from https://files.pythonhosted.org/packages/2e/16/1f73fbaefeb6ce71083fe24e037d0aa708d3d68f4ee1492d717195ed1e39/mbox2m365-3.2.6.tar.gz 2023-09-30T21:17:45,957 Removed mbox2m365==3.2.6 from https://files.pythonhosted.org/packages/2e/16/1f73fbaefeb6ce71083fe24e037d0aa708d3d68f4ee1492d717195ed1e39/mbox2m365-3.2.6.tar.gz from build tracker '/tmp/pip-build-tracker-hf4tlnk5' 2023-09-30T21:17:45,962 Created temporary directory: /tmp/pip-unpack-g4cbzh7b 2023-09-30T21:17:45,963 Created temporary directory: /tmp/pip-unpack-h1g0xefi 2023-09-30T21:17:45,969 Building wheels for collected packages: mbox2m365 2023-09-30T21:17:45,973 Created temporary directory: /tmp/pip-wheel-9xbtqi3g 2023-09-30T21:17:45,973 Destination directory: /tmp/pip-wheel-9xbtqi3g 2023-09-30T21:17:45,975 Building wheel for mbox2m365 (pyproject.toml): started 2023-09-30T21:17:45,977 Running command Building wheel for mbox2m365 (pyproject.toml) 2023-09-30T21:17:46,915 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,915 !! 2023-09-30T21:17:46,916 ******************************************************************************** 2023-09-30T21:17:46,917 ########################################################################## 2023-09-30T21:17:46,917 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,918 ########################################################################## 2023-09-30T21:17:46,919 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:46,920 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-09-30T21:17:46,921 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:46,922 consider this value unless `description` is listed as `dynamic`. 2023-09-30T21:17:46,923 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:46,924 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:46,924 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:46,925 follow strictly the standard. 2023-09-30T21:17:46,926 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-09-30T21:17:46,926 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:46,927 configuration. 2023-09-30T21:17:46,928 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:46,928 or your builds will no longer be supported. 2023-09-30T21:17:46,929 ******************************************************************************** 2023-09-30T21:17:46,930 !! 2023-09-30T21:17:46,930 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:46,931 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,931 !! 2023-09-30T21:17:46,932 ******************************************************************************** 2023-09-30T21:17:46,933 ########################################################################## 2023-09-30T21:17:46,933 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,934 ########################################################################## 2023-09-30T21:17:46,935 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:46,936 `readme = '# Abstract\n\nThis repository contains a simple python script that (1) processes an\n`mbox` style mailbox file, (2) parses out (typically) the last message\nand then (3) re-transmits this using the CLI `m365` toolset. While this\nscript can be used in a completely stand-alone manner to extract a\nmessage from an `mbox` and then *send* using `m365`, it’s main utility\nis when used in a full ecosystem including an email client and `postfix`\nserver.\n\nThe CLI `m365` offers the ability to use Outlook/Office365 to send\nemails. However, this tool is not suited to use as a mail client\u2009—\u2009it\nmerely offers a means to transmit a message from the command line. More\nuseful would be if existing mail clients could leverage `m365` natively.\nCurrently, however, this is not available. Therefore, `mbox2m365` was\ncreated to complete a "missing link" in a full email experience. Using\nthis tool in a configured environment, it is now possible to use *any*\nemail client to transmit messages using Outlook/Office365.\n\n# TL;DR\n\nEven if you’re impatient, it’s a good idea to read this document.\nHowever, assuming you’ve already built the infrastructure, assuming you\nhave installed `m365` (and logged into your Institution from `m365`),\nhave assuming you have setup your email client to email to a dummy local\npostfix account, then you can install `mbox2m365` with a simple\n\n``` bash\npip install mbox2m365\n```\n\nnote at time of writing the PyPI install might not be available. In that\ncase, simply clone this repo and do a\n\n``` bash\n# From the repo root dir\npip install -U .\n```\n\nand fire it off by setting up the monitor on the `mbox` file (here we\nassume the mbox belongs to `rudolph`)\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n(Clearly the above relies on [`entr`](https://github.com/eradman/entr).\nConsult your distro’s repos for the appropriate install. In arch, this\nis `yay -S entr`, in Ubuntu, this is `sudo apt install entr`)\n\n# Security alert!\n\nWait! **Danger, Will Robinson**! Doesn’t this violate security policies?\nI was told my Institution does *not* allow clients like thunderbird to\nconnect to the Outlook server to send emails!\n\nWell, the devil is in the details as the saying goes. This solution does\n*not* violate policy since the "unauthenticated" email client is *not*\never connecting/authenticating to the Outlook server. Rather, the\n"unauthenticated" email client sends messages to a specially configured\nserver that "saves" the emails to a file. Then, a separate program\nteases out the new arrivals and uses the **authenticated** `m365`\nprogram to actually talk to and leverage Outlook to send the email. This\n*separate program* that bridges the mail file to `m365` is none other\nthan this python module.\n\nSo to be pendantic: all credentialing and authentication is handled by\n`m365` and *not* this tool. The end user is still required to\nlogin/authenticate using `m365`. If this has not happened, then\n`mbox2m365` will not work.\n\nAgain, this repo contains **no** authentication tokens/passwords/etc.\n\n# Limitations\n\nLet’s get these out of the way first. This is *not* a full solution for\nlinking a third party email client to Outlook. It gets *close*, IMHO.\nThe limitations are:\n\n- This is not a multi-user solution. All email transmitted to the\n intermediate helper server is added to a single user `mbox` which when\n processed by this script means **all** email in that `mbox` will\n appear to have been transmitted by that user. While in theory it\n should be possible to support multiple users, either by having a\n separate helper server per user or by having multiple local users on\n the mail server and separate `mbox` files, the current solution is\n clearly not scalable. It is decent though for the single user case.\n\n- Fundmanentally, this solution is limited first and foremost by the\n capabilities of the CLI `m365 outlook mail send` functionality. Recent\n updates to `m365` have expanded functionality of this bridge\u2009—\u2009most\n notably attachments are now supported. Still pending is full `bcc`\n support\u2009—\u2009currently all `bcc` recipients are switched to `cc`.\n\nOther limitations stem from the fact the bridge needs to process the\n`mbox` file *de novo* each time mail is received by the helper server.\nThis means that time to process will increase linearly with `mbox` size.\nThe real world implications of this are still being explored.\n\nFinally, the bridge does make a best effort attempt to *wait* until the\n`mbox` has stabilized before analyzing it. When sending emails to\nmultiple recipients, *each* recipient gets a single complete copy in the\n`mbox` with a single address (the multiple recipient addresses are not\nconserved in the `mbox` but *are* processed by this bridge). While\narguably wasteful, the implication is that while all these recipient\ncopies are appended to the `mbox`, the bridge should wait until all have\nbeen added before processing. Currently the bridge attempts this by\nexamining the `mbox` file size when called, and waiting a small delta\ntime interval and checking if the size has changed again. It will wait\nuntil the size is stable before continuing. The TL;DR is this could\nresult in a processing delay.\n\n# Introduction\n\nThe migration/adoption of Office365 by institutions often poses issues\nand problems for users wishing to use different tools for email\ntransmission, particularly on platforms such as Linux.\n\nWhile it is possible to access various Office365 applications,\nparticularly Outlook, via a web interface, this is often not sufficient\nfor several classes of users, particularly those who find the web\ninterface cumbersome (for instance, the web interface has no (or\nlimited) support for keyboard shortcuts, it is cumbersome if not\nimpossible to automate tasks involving event-driven email) and/or for\nusers who have an existing and efficient email workflow using clients\nsuch as `thunderbird` or `mutt`.\n\nThis small repo houses a small and simple python application with some\nsupporting documentation that provides a solution to the problem of\nsending email from an instituion’s managed domain by leveraging\n`postfix` and some `mbox` processing and then using the CLI tool `m365`.\n\n# Method Summary\n\nThe solution requires some seemingly contortuous steps, but in reality\nis rather simple and can be summarized as follows:\n\n## Reading email\n\nReading emails that are locked away in an Outlook server is best\neffected by simply adding a forward incoming email rule from your\nInstitution Outlook Server (IOS) to an externally accessible email\nprovider (such as `gmail`), allowing this email to be read easily by\ntools such as `thunderbird` or `mutt`.\n\n ┌─────────────────────────────────┐\n │IOS that receives incoming email │\n └┬────────────────────────────────┘\n │\n └─────┐\n │\n ┌O─────────────────────┐\n │forwardRule()│\n └┬─────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │gmail│\n └┬────┘\n └─────┐\n │\n ┌O──────────────────────┐\n │clientAccess()│\n └O──────────────────────┘\n ┌─────┘\n │\n ┌┴───────────────────────┐\n │thunderbird / mutt / etc│\n └────────────────────────┘\n\n## Sending email\n\nThe message is now outside of Outlook, and if the Institution does not\nallow non-authorized clients (often this means they only allow Microsoft\ntools) to connect to the Outlook server, the following work around will\nhelp. Essentially, the outside client should be configured to send email\nusing a properly setup `postfix` server that simply copies the target\nemail to an `mbox` file.\n\nThis `mbox` file is then monitored for any changes, and on a change\n(assumed to mean a new email message has been appended), a new process\nis fired off to parse off the latest message and then use the command\nline `m365` CLI tool to have the IOS send the email.\n\n ┌───────────────────────┐\n │thundebird / mutt /etc │\n └┬──────────────────────┘\n │\n └─────┐\n │\n ┌O────────────────────────────┐\n │sendmail() (postfix)│\n └┬────────────────────────────┘\n ┌─────┘\n │\n ┌O────┐\n │mbox │\n └┬────┘\n └─────┐\n │\n ┌O────────┐\n │mbox2m365│ <--- this repo!\n └┬────────┘\n ┌─────┘\n │\n ┌O─────────────┐\n │m365 │\n └┬─────────────┘\n │\n ┌O────────────────────────────────┐\n │IOS that transmits outgoing email│\n └─────────────────────────────────┘\n\n# `mbox2m365`\n\nWhile all the building blocks to effect the solution exist, the one\nmissing piece is the `mbox` to `m365` block, which is provided for by\nthis rather simple python script.\n\n# Setup your helper mail server, `postfix`\n\nFirst, install `postfix`\n\n## Arch\n\n``` bash\nyay -S postfix\n```\n\n## Ubuntu\n\n``` bash\nsudo apt install postfix\n```\n\n# `transport`\n\nNow, edit the `transport` file.\n\n``` bash\nsudo bash\ncd /etc/postfix\ncp transport transport.orig\necho "* local:rudolph" >> transport\n```\n\n# `main.cf`\n\nFor the `main.cf` file, do\n\n``` bash\n# Assuming you are still in the /etc/postfix dir in a sudo bash shell...\ncp main.cf main.cf.orig\necho "mydomain = pangea.net" >> main.cf\necho "luser_relay = rudolph@pangea.net"\necho "transport_maps = hash:/etc/postfix/transport" >> main.cf\n```\n\n# enable/restart the services\n\n``` bash\nsudo systemctl enable postfix.service\nsudo systemctl restart postfix.service\n```\n\n# Email client\n\nSimply configure your email client to use the machine running `postfix`\nas your email server. All emails will be appended to the `transport`\nuser’s `mbox` file.\n\n# Fire up `mbox2m365`\n\nThe final piece of the puzzle:\n\n``` bash\ncd /var/mail\nfind . | entr mbox2m365 --mbox rudolph --b64_encode \\\n --sendFromFile --cleanUp \\\n --waitForStragglers 5\n```\n\n*-30-*\n'` 2023-09-30T21:17:46,937 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:46,937 consider this value unless `readme` is listed as `dynamic`. 2023-09-30T21:17:46,938 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:46,939 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:46,940 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:46,940 follow strictly the standard. 2023-09-30T21:17:46,941 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-09-30T21:17:46,941 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:46,942 configuration. 2023-09-30T21:17:46,943 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:46,943 or your builds will no longer be supported. 2023-09-30T21:17:46,944 ******************************************************************************** 2023-09-30T21:17:46,945 !! 2023-09-30T21:17:46,945 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:46,945 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,946 !! 2023-09-30T21:17:46,947 ******************************************************************************** 2023-09-30T21:17:46,947 ########################################################################## 2023-09-30T21:17:46,948 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,949 ########################################################################## 2023-09-30T21:17:46,950 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:46,950 `license = 'MIT'` 2023-09-30T21:17:46,951 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:46,952 consider this value unless `license` is listed as `dynamic`. 2023-09-30T21:17:46,953 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:46,954 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:46,955 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:46,955 follow strictly the standard. 2023-09-30T21:17:46,957 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-09-30T21:17:46,957 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:46,958 configuration. 2023-09-30T21:17:46,959 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:46,959 or your builds will no longer be supported. 2023-09-30T21:17:46,960 ******************************************************************************** 2023-09-30T21:17:46,962 !! 2023-09-30T21:17:46,962 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:46,963 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,964 !! 2023-09-30T21:17:46,965 ******************************************************************************** 2023-09-30T21:17:46,966 ########################################################################## 2023-09-30T21:17:46,966 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,967 ########################################################################## 2023-09-30T21:17:46,968 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:46,969 `authors = 'Rudolph Pienaar'` 2023-09-30T21:17:46,970 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:46,971 consider this value unless `authors` is listed as `dynamic`. 2023-09-30T21:17:46,972 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:46,973 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:46,973 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:46,974 follow strictly the standard. 2023-09-30T21:17:46,975 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-09-30T21:17:46,975 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:46,976 configuration. 2023-09-30T21:17:46,977 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:46,977 or your builds will no longer be supported. 2023-09-30T21:17:46,978 ******************************************************************************** 2023-09-30T21:17:46,978 !! 2023-09-30T21:17:46,979 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:46,979 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,980 !! 2023-09-30T21:17:46,981 ******************************************************************************** 2023-09-30T21:17:46,981 ########################################################################## 2023-09-30T21:17:46,982 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,982 ########################################################################## 2023-09-30T21:17:46,983 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:46,984 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-09-30T21:17:46,985 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:46,986 consider this value unless `scripts` is listed as `dynamic`. 2023-09-30T21:17:46,987 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:46,988 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:46,989 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:46,989 follow strictly the standard. 2023-09-30T21:17:46,990 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-09-30T21:17:46,990 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:46,991 configuration. 2023-09-30T21:17:46,992 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:46,993 or your builds will no longer be supported. 2023-09-30T21:17:46,993 ******************************************************************************** 2023-09-30T21:17:46,994 !! 2023-09-30T21:17:46,995 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:46,996 /tmp/pip-build-env-ovz5e6eo/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-09-30T21:17:46,996 !! 2023-09-30T21:17:46,997 ******************************************************************************** 2023-09-30T21:17:46,998 ########################################################################## 2023-09-30T21:17:46,998 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-09-30T21:17:46,999 ########################################################################## 2023-09-30T21:17:47,000 The following seems to be defined outside of `pyproject.toml`: 2023-09-30T21:17:47,001 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-09-30T21:17:47,001 According to the spec (see the link below), however, setuptools CANNOT 2023-09-30T21:17:47,002 consider this value unless `dependencies` is listed as `dynamic`. 2023-09-30T21:17:47,003 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-09-30T21:17:47,004 For the time being, `setuptools` will still consider the given value (as a 2023-09-30T21:17:47,004 **transitional** measure), but please note that future releases of setuptools will 2023-09-30T21:17:47,005 follow strictly the standard. 2023-09-30T21:17:47,006 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-09-30T21:17:47,006 remove the `[project]` table from your file and rely entirely on other means of 2023-09-30T21:17:47,007 configuration. 2023-09-30T21:17:47,008 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-09-30T21:17:47,008 or your builds will no longer be supported. 2023-09-30T21:17:47,009 ******************************************************************************** 2023-09-30T21:17:47,010 !! 2023-09-30T21:17:47,011 _handle_missing_dynamic(dist, project_table) 2023-09-30T21:17:47,201 running bdist_wheel 2023-09-30T21:17:47,218 running build 2023-09-30T21:17:47,218 running build_py 2023-09-30T21:17:47,223 creating build 2023-09-30T21:17:47,224 creating build/lib 2023-09-30T21:17:47,224 creating build/lib/mbox2m365 2023-09-30T21:17:47,226 copying mbox2m365/mbox2m365.py -> build/lib/mbox2m365 2023-09-30T21:17:47,228 copying mbox2m365/mailSink.py -> build/lib/mbox2m365 2023-09-30T21:17:47,230 copying mbox2m365/__init__.py -> build/lib/mbox2m365 2023-09-30T21:17:47,232 copying mbox2m365/__main__.py -> build/lib/mbox2m365 2023-09-30T21:17:47,235 creating build/lib/jobber 2023-09-30T21:17:47,235 copying jobber/jobber.py -> build/lib/jobber 2023-09-30T21:17:47,238 running egg_info 2023-09-30T21:17:47,241 writing mbox2m365.egg-info/PKG-INFO 2023-09-30T21:17:47,244 writing dependency_links to mbox2m365.egg-info/dependency_links.txt 2023-09-30T21:17:47,246 writing entry points to mbox2m365.egg-info/entry_points.txt 2023-09-30T21:17:47,247 writing requirements to mbox2m365.egg-info/requires.txt 2023-09-30T21:17:47,248 writing top-level names to mbox2m365.egg-info/top_level.txt 2023-09-30T21:17:47,255 reading manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:47,257 reading manifest template 'MANIFEST.in' 2023-09-30T21:17:47,257 adding license file 'LICENSE' 2023-09-30T21:17:47,259 writing manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-09-30T21:17:47,268 installing to build/bdist.linux-armv7l/wheel 2023-09-30T21:17:47,268 running install 2023-09-30T21:17:47,292 running install_lib 2023-09-30T21:17:47,296 creating build/bdist.linux-armv7l 2023-09-30T21:17:47,297 creating build/bdist.linux-armv7l/wheel 2023-09-30T21:17:47,298 creating build/bdist.linux-armv7l/wheel/jobber 2023-09-30T21:17:47,300 copying build/lib/jobber/jobber.py -> build/bdist.linux-armv7l/wheel/jobber 2023-09-30T21:17:47,303 creating build/bdist.linux-armv7l/wheel/mbox2m365 2023-09-30T21:17:47,304 copying build/lib/mbox2m365/mbox2m365.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-09-30T21:17:47,307 copying build/lib/mbox2m365/mailSink.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-09-30T21:17:47,310 copying build/lib/mbox2m365/__init__.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-09-30T21:17:47,313 copying build/lib/mbox2m365/__main__.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-09-30T21:17:47,315 running install_egg_info 2023-09-30T21:17:47,319 Copying mbox2m365.egg-info to build/bdist.linux-armv7l/wheel/mbox2m365-3.2.6-py3.11.egg-info 2023-09-30T21:17:47,336 running install_scripts 2023-09-30T21:17:47,353 creating build/bdist.linux-armv7l/wheel/mbox2m365-3.2.6.dist-info/WHEEL 2023-09-30T21:17:47,355 creating '/tmp/pip-wheel-9xbtqi3g/.tmp-lnrk7xft/mbox2m365-3.2.6-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2023-09-30T21:17:47,358 adding 'jobber/jobber.py' 2023-09-30T21:17:47,359 adding 'mbox2m365/__init__.py' 2023-09-30T21:17:47,361 adding 'mbox2m365/__main__.py' 2023-09-30T21:17:47,363 adding 'mbox2m365/mailSink.py' 2023-09-30T21:17:47,367 adding 'mbox2m365/mbox2m365.py' 2023-09-30T21:17:47,369 adding 'mbox2m365-3.2.6.dist-info/LICENSE' 2023-09-30T21:17:47,371 adding 'mbox2m365-3.2.6.dist-info/METADATA' 2023-09-30T21:17:47,372 adding 'mbox2m365-3.2.6.dist-info/WHEEL' 2023-09-30T21:17:47,373 adding 'mbox2m365-3.2.6.dist-info/entry_points.txt' 2023-09-30T21:17:47,374 adding 'mbox2m365-3.2.6.dist-info/top_level.txt' 2023-09-30T21:17:47,375 adding 'mbox2m365-3.2.6.dist-info/RECORD' 2023-09-30T21:17:47,377 removing build/bdist.linux-armv7l/wheel 2023-09-30T21:17:47,499 Building wheel for mbox2m365 (pyproject.toml): finished with status 'done' 2023-09-30T21:17:47,504 Created wheel for mbox2m365: filename=mbox2m365-3.2.6-py3-none-any.whl size=20822 sha256=1d44ef02223ce9f9b720a9c618289b04d9d965b2b4faef093b2e375992ac1271 2023-09-30T21:17:47,506 Stored in directory: /tmp/pip-ephem-wheel-cache-fnz5s1tn/wheels/e5/30/2a/b78630839c66b6ad81490a74cdfd42b024ca426ff70c24ebb2 2023-09-30T21:17:47,517 Successfully built mbox2m365 2023-09-30T21:17:47,523 Removed build tracker: '/tmp/pip-build-tracker-hf4tlnk5'