2023-10-22T23:52:06,983 Created temporary directory: /tmp/pip-build-tracker-7655de43 2023-10-22T23:52:06,984 Initialized build tracking at /tmp/pip-build-tracker-7655de43 2023-10-22T23:52:06,985 Created build tracker: /tmp/pip-build-tracker-7655de43 2023-10-22T23:52:06,985 Entered build tracker: /tmp/pip-build-tracker-7655de43 2023-10-22T23:52:06,986 Created temporary directory: /tmp/pip-wheel-6zpxc8ch 2023-10-22T23:52:06,989 Created temporary directory: /tmp/pip-ephem-wheel-cache-oookr3sk 2023-10-22T23:52:07,010 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-10-22T23:52:07,014 2 location(s) to search for versions of mbox2m365: 2023-10-22T23:52:07,014 * https://pypi.org/simple/mbox2m365/ 2023-10-22T23:52:07,014 * https://www.piwheels.org/simple/mbox2m365/ 2023-10-22T23:52:07,015 Fetching project page and analyzing links: https://pypi.org/simple/mbox2m365/ 2023-10-22T23:52:07,016 Getting page https://pypi.org/simple/mbox2m365/ 2023-10-22T23:52:07,017 Found index url https://pypi.org/simple/ 2023-10-22T23:52:07,244 Fetched page https://pypi.org/simple/mbox2m365/ as application/vnd.pypi.simple.v1+json 2023-10-22T23:52:07,247 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-10-22T23:52:07,247 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-10-22T23:52:07,248 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-10-22T23:52:07,249 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-10-22T23:52:07,249 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-10-22T23:52:07,250 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-10-22T23:52:07,251 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-10-22T23:52:07,251 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-10-22T23:52:07,252 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-10-22T23:52:07,253 Found link https://files.pythonhosted.org/packages/25/bb/5716e2f39ca066c7dd74d2635181cab55a4f0dfc7e9641ce30ef014e3281/mbox2m365-3.2.8.tar.gz (from https://pypi.org/simple/mbox2m365/), version: 3.2.8 2023-10-22T23:52:07,254 Fetching project page and analyzing links: https://www.piwheels.org/simple/mbox2m365/ 2023-10-22T23:52:07,254 Getting page https://www.piwheels.org/simple/mbox2m365/ 2023-10-22T23:52:07,256 Found index url https://www.piwheels.org/simple/ 2023-10-22T23:52:07,427 Fetched page https://www.piwheels.org/simple/mbox2m365/ as text/html 2023-10-22T23:52:07,430 Skipping link: No binaries permitted for mbox2m365: https://www.piwheels.org/simple/mbox2m365/mbox2m365-3.2.6-py3-none-any.whl#sha256=1d44ef02223ce9f9b720a9c618289b04d9d965b2b4faef093b2e375992ac1271 (from https://www.piwheels.org/simple/mbox2m365/) 2023-10-22T23:52:07,430 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-10-22T23:52:07,431 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-10-22T23:52:07,432 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-10-22T23:52:07,433 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-10-22T23:52:07,433 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-10-22T23:52:07,434 Skipping link: not a file: https://www.piwheels.org/simple/mbox2m365/ 2023-10-22T23:52:07,434 Skipping link: not a file: https://pypi.org/simple/mbox2m365/ 2023-10-22T23:52:07,453 Given no hashes to check 1 links for project 'mbox2m365': discarding no candidates 2023-10-22T23:52:07,472 Collecting mbox2m365==3.2.8 2023-10-22T23:52:07,474 Created temporary directory: /tmp/pip-unpack-a5x83smt 2023-10-22T23:52:07,704 Downloading mbox2m365-3.2.8.tar.gz (24 kB) 2023-10-22T23:52:07,760 Added mbox2m365==3.2.8 from https://files.pythonhosted.org/packages/25/bb/5716e2f39ca066c7dd74d2635181cab55a4f0dfc7e9641ce30ef014e3281/mbox2m365-3.2.8.tar.gz to build tracker '/tmp/pip-build-tracker-7655de43' 2023-10-22T23:52:07,764 Created temporary directory: /tmp/pip-build-env-1mjjb1hj 2023-10-22T23:52:07,769 Installing build dependencies: started 2023-10-22T23:52:07,770 Running command pip subprocess to install build dependencies 2023-10-22T23:52:08,951 Using pip 23.2.1 from /usr/local/lib/python3.11/dist-packages/pip (python 3.11) 2023-10-22T23:52:09,448 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple 2023-10-22T23:52:11,189 Collecting setuptools>=42 2023-10-22T23:52:11,256 Using cached https://www.piwheels.org/simple/setuptools/setuptools-68.2.2-py3-none-any.whl (807 kB) 2023-10-22T23:52:11,493 Collecting wheel 2023-10-22T23:52:11,514 Using cached https://www.piwheels.org/simple/wheel/wheel-0.41.2-py3-none-any.whl (64 kB) 2023-10-22T23:52:14,081 Installing collected packages: wheel, setuptools 2023-10-22T23:52:14,313 Creating /tmp/pip-build-env-1mjjb1hj/overlay/local/bin 2023-10-22T23:52:14,316 changing mode of /tmp/pip-build-env-1mjjb1hj/overlay/local/bin/wheel to 755 2023-10-22T23:52:16,608 Successfully installed setuptools-68.2.2 wheel-0.41.2 2023-10-22T23:52:16,895 [notice] A new release of pip is available: 23.2.1 -> 23.3 2023-10-22T23:52:16,896 [notice] To update, run: python3 -m pip install --upgrade pip 2023-10-22T23:52:17,166 Installing build dependencies: finished with status 'done' 2023-10-22T23:52:17,170 Getting requirements to build wheel: started 2023-10-22T23:52:17,171 Running command Getting requirements to build wheel 2023-10-22T23:52:17,745 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,745 !! 2023-10-22T23:52:17,746 ******************************************************************************** 2023-10-22T23:52:17,747 ########################################################################## 2023-10-22T23:52:17,747 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,748 ########################################################################## 2023-10-22T23:52:17,749 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,750 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-10-22T23:52:17,751 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,751 consider this value unless `description` is listed as `dynamic`. 2023-10-22T23:52:17,752 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,753 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,754 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,754 follow strictly the standard. 2023-10-22T23:52:17,755 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-10-22T23:52:17,755 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,756 configuration. 2023-10-22T23:52:17,757 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,757 or your builds will no longer be supported. 2023-10-22T23:52:17,758 ******************************************************************************** 2023-10-22T23:52:17,759 !! 2023-10-22T23:52:17,759 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:17,760 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,761 !! 2023-10-22T23:52:17,761 ******************************************************************************** 2023-10-22T23:52:17,762 ########################################################################## 2023-10-22T23:52:17,762 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,763 ########################################################################## 2023-10-22T23:52:17,764 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,765 `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-10-22T23:52:17,767 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,768 consider this value unless `readme` is listed as `dynamic`. 2023-10-22T23:52:17,769 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,770 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,770 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,771 follow strictly the standard. 2023-10-22T23:52:17,772 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-10-22T23:52:17,773 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,773 configuration. 2023-10-22T23:52:17,775 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,775 or your builds will no longer be supported. 2023-10-22T23:52:17,776 ******************************************************************************** 2023-10-22T23:52:17,777 !! 2023-10-22T23:52:17,778 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:17,778 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,779 !! 2023-10-22T23:52:17,780 ******************************************************************************** 2023-10-22T23:52:17,781 ########################################################################## 2023-10-22T23:52:17,781 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,782 ########################################################################## 2023-10-22T23:52:17,783 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,785 `license = 'MIT'` 2023-10-22T23:52:17,786 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,787 consider this value unless `license` is listed as `dynamic`. 2023-10-22T23:52:17,788 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,790 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,791 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,791 follow strictly the standard. 2023-10-22T23:52:17,792 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-10-22T23:52:17,793 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,793 configuration. 2023-10-22T23:52:17,794 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,795 or your builds will no longer be supported. 2023-10-22T23:52:17,795 ******************************************************************************** 2023-10-22T23:52:17,796 !! 2023-10-22T23:52:17,797 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:17,797 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,798 !! 2023-10-22T23:52:17,799 ******************************************************************************** 2023-10-22T23:52:17,800 ########################################################################## 2023-10-22T23:52:17,800 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,801 ########################################################################## 2023-10-22T23:52:17,802 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,803 `authors = 'Rudolph Pienaar'` 2023-10-22T23:52:17,804 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,805 consider this value unless `authors` is listed as `dynamic`. 2023-10-22T23:52:17,806 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,807 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,807 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,808 follow strictly the standard. 2023-10-22T23:52:17,810 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-10-22T23:52:17,811 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,811 configuration. 2023-10-22T23:52:17,813 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,813 or your builds will no longer be supported. 2023-10-22T23:52:17,814 ******************************************************************************** 2023-10-22T23:52:17,815 !! 2023-10-22T23:52:17,816 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:17,816 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,817 !! 2023-10-22T23:52:17,818 ******************************************************************************** 2023-10-22T23:52:17,818 ########################################################################## 2023-10-22T23:52:17,819 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,820 ########################################################################## 2023-10-22T23:52:17,821 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,822 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-10-22T23:52:17,823 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,823 consider this value unless `scripts` is listed as `dynamic`. 2023-10-22T23:52:17,825 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,826 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,826 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,826 follow strictly the standard. 2023-10-22T23:52:17,827 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-10-22T23:52:17,828 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,828 configuration. 2023-10-22T23:52:17,829 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,829 or your builds will no longer be supported. 2023-10-22T23:52:17,830 ******************************************************************************** 2023-10-22T23:52:17,831 !! 2023-10-22T23:52:17,831 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:17,832 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:17,832 !! 2023-10-22T23:52:17,833 ******************************************************************************** 2023-10-22T23:52:17,833 ########################################################################## 2023-10-22T23:52:17,834 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:17,835 ########################################################################## 2023-10-22T23:52:17,836 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:17,837 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-10-22T23:52:17,839 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:17,839 consider this value unless `dependencies` is listed as `dynamic`. 2023-10-22T23:52:17,841 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:17,842 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:17,843 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:17,843 follow strictly the standard. 2023-10-22T23:52:17,844 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-10-22T23:52:17,845 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:17,845 configuration. 2023-10-22T23:52:17,846 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:17,847 or your builds will no longer be supported. 2023-10-22T23:52:17,847 ******************************************************************************** 2023-10-22T23:52:17,848 !! 2023-10-22T23:52:17,849 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,062 running egg_info 2023-10-22T23:52:18,067 writing mbox2m365.egg-info/PKG-INFO 2023-10-22T23:52:18,071 writing dependency_links to mbox2m365.egg-info/dependency_links.txt 2023-10-22T23:52:18,073 writing entry points to mbox2m365.egg-info/entry_points.txt 2023-10-22T23:52:18,075 writing requirements to mbox2m365.egg-info/requires.txt 2023-10-22T23:52:18,076 writing top-level names to mbox2m365.egg-info/top_level.txt 2023-10-22T23:52:18,091 reading manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:18,094 reading manifest template 'MANIFEST.in' 2023-10-22T23:52:18,095 adding license file 'LICENSE' 2023-10-22T23:52:18,097 writing manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:18,214 Getting requirements to build wheel: finished with status 'done' 2023-10-22T23:52:18,225 Created temporary directory: /tmp/pip-modern-metadata-3uguf_by 2023-10-22T23:52:18,227 Preparing metadata (pyproject.toml): started 2023-10-22T23:52:18,229 Running command Preparing metadata (pyproject.toml) 2023-10-22T23:52:18,728 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,728 !! 2023-10-22T23:52:18,729 ******************************************************************************** 2023-10-22T23:52:18,730 ########################################################################## 2023-10-22T23:52:18,730 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,731 ########################################################################## 2023-10-22T23:52:18,732 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,733 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-10-22T23:52:18,734 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,734 consider this value unless `description` is listed as `dynamic`. 2023-10-22T23:52:18,735 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,737 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,737 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,738 follow strictly the standard. 2023-10-22T23:52:18,739 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-10-22T23:52:18,739 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,740 configuration. 2023-10-22T23:52:18,741 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,741 or your builds will no longer be supported. 2023-10-22T23:52:18,742 ******************************************************************************** 2023-10-22T23:52:18,743 !! 2023-10-22T23:52:18,743 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,744 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,745 !! 2023-10-22T23:52:18,746 ******************************************************************************** 2023-10-22T23:52:18,746 ########################################################################## 2023-10-22T23:52:18,747 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,747 ########################################################################## 2023-10-22T23:52:18,748 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,750 `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-10-22T23:52:18,752 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,752 consider this value unless `readme` is listed as `dynamic`. 2023-10-22T23:52:18,753 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,755 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,755 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,756 follow strictly the standard. 2023-10-22T23:52:18,757 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-10-22T23:52:18,757 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,758 configuration. 2023-10-22T23:52:18,759 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,760 or your builds will no longer be supported. 2023-10-22T23:52:18,760 ******************************************************************************** 2023-10-22T23:52:18,761 !! 2023-10-22T23:52:18,762 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,762 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,763 !! 2023-10-22T23:52:18,764 ******************************************************************************** 2023-10-22T23:52:18,765 ########################################################################## 2023-10-22T23:52:18,765 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,766 ########################################################################## 2023-10-22T23:52:18,767 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,768 `license = 'MIT'` 2023-10-22T23:52:18,769 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,769 consider this value unless `license` is listed as `dynamic`. 2023-10-22T23:52:18,771 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,772 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,772 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,773 follow strictly the standard. 2023-10-22T23:52:18,774 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-10-22T23:52:18,774 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,775 configuration. 2023-10-22T23:52:18,776 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,776 or your builds will no longer be supported. 2023-10-22T23:52:18,777 ******************************************************************************** 2023-10-22T23:52:18,778 !! 2023-10-22T23:52:18,779 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,780 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,780 !! 2023-10-22T23:52:18,782 ******************************************************************************** 2023-10-22T23:52:18,782 ########################################################################## 2023-10-22T23:52:18,783 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,783 ########################################################################## 2023-10-22T23:52:18,784 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,786 `authors = 'Rudolph Pienaar'` 2023-10-22T23:52:18,787 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,787 consider this value unless `authors` is listed as `dynamic`. 2023-10-22T23:52:18,789 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,790 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,790 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,791 follow strictly the standard. 2023-10-22T23:52:18,792 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-10-22T23:52:18,793 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,793 configuration. 2023-10-22T23:52:18,794 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,795 or your builds will no longer be supported. 2023-10-22T23:52:18,795 ******************************************************************************** 2023-10-22T23:52:18,796 !! 2023-10-22T23:52:18,797 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,798 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,798 !! 2023-10-22T23:52:18,799 ******************************************************************************** 2023-10-22T23:52:18,800 ########################################################################## 2023-10-22T23:52:18,800 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,800 ########################################################################## 2023-10-22T23:52:18,802 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,803 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-10-22T23:52:18,803 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,804 consider this value unless `scripts` is listed as `dynamic`. 2023-10-22T23:52:18,805 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,806 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,806 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,807 follow strictly the standard. 2023-10-22T23:52:18,808 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-10-22T23:52:18,809 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,809 configuration. 2023-10-22T23:52:18,810 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,810 or your builds will no longer be supported. 2023-10-22T23:52:18,811 ******************************************************************************** 2023-10-22T23:52:18,812 !! 2023-10-22T23:52:18,813 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:18,813 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:18,814 !! 2023-10-22T23:52:18,815 ******************************************************************************** 2023-10-22T23:52:18,815 ########################################################################## 2023-10-22T23:52:18,816 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:18,816 ########################################################################## 2023-10-22T23:52:18,818 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:18,819 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-10-22T23:52:18,820 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:18,821 consider this value unless `dependencies` is listed as `dynamic`. 2023-10-22T23:52:18,822 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:18,823 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:18,823 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:18,824 follow strictly the standard. 2023-10-22T23:52:18,825 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-10-22T23:52:18,825 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:18,826 configuration. 2023-10-22T23:52:18,827 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:18,827 or your builds will no longer be supported. 2023-10-22T23:52:18,828 ******************************************************************************** 2023-10-22T23:52:18,830 !! 2023-10-22T23:52:18,830 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,033 running dist_info 2023-10-22T23:52:19,038 creating /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info 2023-10-22T23:52:19,042 writing /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/PKG-INFO 2023-10-22T23:52:19,046 writing dependency_links to /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/dependency_links.txt 2023-10-22T23:52:19,048 writing entry points to /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/entry_points.txt 2023-10-22T23:52:19,049 writing requirements to /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/requires.txt 2023-10-22T23:52:19,050 writing top-level names to /tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/top_level.txt 2023-10-22T23:52:19,052 writing manifest file '/tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:19,065 reading manifest file '/tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:19,067 reading manifest template 'MANIFEST.in' 2023-10-22T23:52:19,068 adding license file 'LICENSE' 2023-10-22T23:52:19,070 writing manifest file '/tmp/pip-modern-metadata-3uguf_by/mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:19,071 creating '/tmp/pip-modern-metadata-3uguf_by/mbox2m365-3.2.8.dist-info' 2023-10-22T23:52:19,222 Preparing metadata (pyproject.toml): finished with status 'done' 2023-10-22T23:52:19,228 Source in /tmp/pip-wheel-6zpxc8ch/mbox2m365_39f2ef82cd78498f9521f0d785fd2d4b has version 3.2.8, which satisfies requirement mbox2m365==3.2.8 from https://files.pythonhosted.org/packages/25/bb/5716e2f39ca066c7dd74d2635181cab55a4f0dfc7e9641ce30ef014e3281/mbox2m365-3.2.8.tar.gz 2023-10-22T23:52:19,228 Removed mbox2m365==3.2.8 from https://files.pythonhosted.org/packages/25/bb/5716e2f39ca066c7dd74d2635181cab55a4f0dfc7e9641ce30ef014e3281/mbox2m365-3.2.8.tar.gz from build tracker '/tmp/pip-build-tracker-7655de43' 2023-10-22T23:52:19,233 Created temporary directory: /tmp/pip-unpack-tfi2l0q8 2023-10-22T23:52:19,234 Created temporary directory: /tmp/pip-unpack-8wgccmfq 2023-10-22T23:52:19,240 Building wheels for collected packages: mbox2m365 2023-10-22T23:52:19,244 Created temporary directory: /tmp/pip-wheel-erctrcc4 2023-10-22T23:52:19,245 Destination directory: /tmp/pip-wheel-erctrcc4 2023-10-22T23:52:19,247 Building wheel for mbox2m365 (pyproject.toml): started 2023-10-22T23:52:19,248 Running command Building wheel for mbox2m365 (pyproject.toml) 2023-10-22T23:52:19,729 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `description` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,729 !! 2023-10-22T23:52:19,730 ******************************************************************************** 2023-10-22T23:52:19,731 ########################################################################## 2023-10-22T23:52:19,731 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,732 ########################################################################## 2023-10-22T23:52:19,733 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,734 `description = "'Send a message stored within an mbox using m365 (Office365)'"` 2023-10-22T23:52:19,735 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,736 consider this value unless `description` is listed as `dynamic`. 2023-10-22T23:52:19,737 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,738 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,739 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,740 follow strictly the standard. 2023-10-22T23:52:19,740 To prevent this warning, you can list `description` under `dynamic` or alternatively 2023-10-22T23:52:19,741 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,741 configuration. 2023-10-22T23:52:19,742 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,743 or your builds will no longer be supported. 2023-10-22T23:52:19,743 ******************************************************************************** 2023-10-22T23:52:19,745 !! 2023-10-22T23:52:19,745 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,746 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `readme` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,746 !! 2023-10-22T23:52:19,747 ******************************************************************************** 2023-10-22T23:52:19,748 ########################################################################## 2023-10-22T23:52:19,748 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,749 ########################################################################## 2023-10-22T23:52:19,750 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,751 `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-10-22T23:52:19,753 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,753 consider this value unless `readme` is listed as `dynamic`. 2023-10-22T23:52:19,754 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,755 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,756 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,756 follow strictly the standard. 2023-10-22T23:52:19,757 To prevent this warning, you can list `readme` under `dynamic` or alternatively 2023-10-22T23:52:19,758 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,758 configuration. 2023-10-22T23:52:19,759 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,760 or your builds will no longer be supported. 2023-10-22T23:52:19,761 ******************************************************************************** 2023-10-22T23:52:19,762 !! 2023-10-22T23:52:19,762 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,763 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `license` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,764 !! 2023-10-22T23:52:19,765 ******************************************************************************** 2023-10-22T23:52:19,766 ########################################################################## 2023-10-22T23:52:19,766 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,767 ########################################################################## 2023-10-22T23:52:19,768 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,769 `license = 'MIT'` 2023-10-22T23:52:19,771 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,771 consider this value unless `license` is listed as `dynamic`. 2023-10-22T23:52:19,772 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,774 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,775 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,775 follow strictly the standard. 2023-10-22T23:52:19,777 To prevent this warning, you can list `license` under `dynamic` or alternatively 2023-10-22T23:52:19,778 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,779 configuration. 2023-10-22T23:52:19,780 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,780 or your builds will no longer be supported. 2023-10-22T23:52:19,781 ******************************************************************************** 2023-10-22T23:52:19,782 !! 2023-10-22T23:52:19,783 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,783 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `authors` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,784 !! 2023-10-22T23:52:19,785 ******************************************************************************** 2023-10-22T23:52:19,785 ########################################################################## 2023-10-22T23:52:19,786 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,786 ########################################################################## 2023-10-22T23:52:19,787 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,788 `authors = 'Rudolph Pienaar'` 2023-10-22T23:52:19,789 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,790 consider this value unless `authors` is listed as `dynamic`. 2023-10-22T23:52:19,791 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,792 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,792 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,793 follow strictly the standard. 2023-10-22T23:52:19,794 To prevent this warning, you can list `authors` under `dynamic` or alternatively 2023-10-22T23:52:19,795 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,795 configuration. 2023-10-22T23:52:19,797 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,797 or your builds will no longer be supported. 2023-10-22T23:52:19,798 ******************************************************************************** 2023-10-22T23:52:19,799 !! 2023-10-22T23:52:19,799 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,800 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `scripts` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,801 !! 2023-10-22T23:52:19,802 ******************************************************************************** 2023-10-22T23:52:19,802 ########################################################################## 2023-10-22T23:52:19,803 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,803 ########################################################################## 2023-10-22T23:52:19,804 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,806 `scripts = ['mbox2m365 = mbox2m365.__main__:main']` 2023-10-22T23:52:19,807 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,807 consider this value unless `scripts` is listed as `dynamic`. 2023-10-22T23:52:19,809 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,810 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,811 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,811 follow strictly the standard. 2023-10-22T23:52:19,813 To prevent this warning, you can list `scripts` under `dynamic` or alternatively 2023-10-22T23:52:19,813 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,814 configuration. 2023-10-22T23:52:19,815 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,816 or your builds will no longer be supported. 2023-10-22T23:52:19,816 ******************************************************************************** 2023-10-22T23:52:19,817 !! 2023-10-22T23:52:19,818 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:19,818 /tmp/pip-build-env-1mjjb1hj/overlay/local/lib/python3.11/dist-packages/setuptools/config/_apply_pyprojecttoml.py:73: _WouldIgnoreField: `dependencies` defined outside of `pyproject.toml` would be ignored. 2023-10-22T23:52:19,818 !! 2023-10-22T23:52:19,819 ******************************************************************************** 2023-10-22T23:52:19,820 ########################################################################## 2023-10-22T23:52:19,820 # configuration would be ignored/result in error due to `pyproject.toml` # 2023-10-22T23:52:19,821 ########################################################################## 2023-10-22T23:52:19,822 The following seems to be defined outside of `pyproject.toml`: 2023-10-22T23:52:19,823 `dependencies = ['pfmisc', 'pudb', 'appdirs']` 2023-10-22T23:52:19,824 According to the spec (see the link below), however, setuptools CANNOT 2023-10-22T23:52:19,824 consider this value unless `dependencies` is listed as `dynamic`. 2023-10-22T23:52:19,825 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ 2023-10-22T23:52:19,826 For the time being, `setuptools` will still consider the given value (as a 2023-10-22T23:52:19,827 **transitional** measure), but please note that future releases of setuptools will 2023-10-22T23:52:19,827 follow strictly the standard. 2023-10-22T23:52:19,828 To prevent this warning, you can list `dependencies` under `dynamic` or alternatively 2023-10-22T23:52:19,829 remove the `[project]` table from your file and rely entirely on other means of 2023-10-22T23:52:19,830 configuration. 2023-10-22T23:52:19,831 By 2023-Oct-30, you need to update your project and remove deprecated calls 2023-10-22T23:52:19,831 or your builds will no longer be supported. 2023-10-22T23:52:19,832 ******************************************************************************** 2023-10-22T23:52:19,833 !! 2023-10-22T23:52:19,834 _handle_missing_dynamic(dist, project_table) 2023-10-22T23:52:20,015 running bdist_wheel 2023-10-22T23:52:20,032 running build 2023-10-22T23:52:20,032 running build_py 2023-10-22T23:52:20,037 creating build 2023-10-22T23:52:20,037 creating build/lib 2023-10-22T23:52:20,038 creating build/lib/mbox2m365 2023-10-22T23:52:20,040 copying mbox2m365/__main__.py -> build/lib/mbox2m365 2023-10-22T23:52:20,042 copying mbox2m365/__init__.py -> build/lib/mbox2m365 2023-10-22T23:52:20,044 copying mbox2m365/mailSink.py -> build/lib/mbox2m365 2023-10-22T23:52:20,046 copying mbox2m365/mbox2m365.py -> build/lib/mbox2m365 2023-10-22T23:52:20,049 creating build/lib/jobber 2023-10-22T23:52:20,050 copying jobber/jobber.py -> build/lib/jobber 2023-10-22T23:52:20,052 running egg_info 2023-10-22T23:52:20,056 writing mbox2m365.egg-info/PKG-INFO 2023-10-22T23:52:20,059 writing dependency_links to mbox2m365.egg-info/dependency_links.txt 2023-10-22T23:52:20,060 writing entry points to mbox2m365.egg-info/entry_points.txt 2023-10-22T23:52:20,066 writing requirements to mbox2m365.egg-info/requires.txt 2023-10-22T23:52:20,067 writing top-level names to mbox2m365.egg-info/top_level.txt 2023-10-22T23:52:20,074 reading manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:20,076 reading manifest template 'MANIFEST.in' 2023-10-22T23:52:20,077 adding license file 'LICENSE' 2023-10-22T23:52:20,079 writing manifest file 'mbox2m365.egg-info/SOURCES.txt' 2023-10-22T23:52:20,087 installing to build/bdist.linux-armv7l/wheel 2023-10-22T23:52:20,088 running install 2023-10-22T23:52:20,112 running install_lib 2023-10-22T23:52:20,116 creating build/bdist.linux-armv7l 2023-10-22T23:52:20,117 creating build/bdist.linux-armv7l/wheel 2023-10-22T23:52:20,118 creating build/bdist.linux-armv7l/wheel/jobber 2023-10-22T23:52:20,119 copying build/lib/jobber/jobber.py -> build/bdist.linux-armv7l/wheel/jobber 2023-10-22T23:52:20,122 creating build/bdist.linux-armv7l/wheel/mbox2m365 2023-10-22T23:52:20,123 copying build/lib/mbox2m365/__main__.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-10-22T23:52:20,126 copying build/lib/mbox2m365/__init__.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-10-22T23:52:20,127 copying build/lib/mbox2m365/mailSink.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-10-22T23:52:20,129 copying build/lib/mbox2m365/mbox2m365.py -> build/bdist.linux-armv7l/wheel/mbox2m365 2023-10-22T23:52:20,132 running install_egg_info 2023-10-22T23:52:20,136 Copying mbox2m365.egg-info to build/bdist.linux-armv7l/wheel/mbox2m365-3.2.8-py3.11.egg-info 2023-10-22T23:52:20,148 running install_scripts 2023-10-22T23:52:20,164 creating build/bdist.linux-armv7l/wheel/mbox2m365-3.2.8.dist-info/WHEEL 2023-10-22T23:52:20,166 creating '/tmp/pip-wheel-erctrcc4/.tmp-imp49j9c/mbox2m365-3.2.8-py3-none-any.whl' and adding 'build/bdist.linux-armv7l/wheel' to it 2023-10-22T23:52:20,169 adding 'jobber/jobber.py' 2023-10-22T23:52:20,171 adding 'mbox2m365/__init__.py' 2023-10-22T23:52:20,173 adding 'mbox2m365/__main__.py' 2023-10-22T23:52:20,174 adding 'mbox2m365/mailSink.py' 2023-10-22T23:52:20,178 adding 'mbox2m365/mbox2m365.py' 2023-10-22T23:52:20,181 adding 'mbox2m365-3.2.8.dist-info/LICENSE' 2023-10-22T23:52:20,183 adding 'mbox2m365-3.2.8.dist-info/METADATA' 2023-10-22T23:52:20,184 adding 'mbox2m365-3.2.8.dist-info/WHEEL' 2023-10-22T23:52:20,185 adding 'mbox2m365-3.2.8.dist-info/entry_points.txt' 2023-10-22T23:52:20,186 adding 'mbox2m365-3.2.8.dist-info/top_level.txt' 2023-10-22T23:52:20,187 adding 'mbox2m365-3.2.8.dist-info/RECORD' 2023-10-22T23:52:20,188 removing build/bdist.linux-armv7l/wheel 2023-10-22T23:52:20,311 Building wheel for mbox2m365 (pyproject.toml): finished with status 'done' 2023-10-22T23:52:20,316 Created wheel for mbox2m365: filename=mbox2m365-3.2.8-py3-none-any.whl size=20937 sha256=70912d813d7ec1a518d43a612ed8d19e51af3255bb7b1827d6cd5d98a66f6838 2023-10-22T23:52:20,317 Stored in directory: /tmp/pip-ephem-wheel-cache-oookr3sk/wheels/ca/89/36/ec4dccbe10027f44e50e1b03b830022370714addc300f98a72 2023-10-22T23:52:20,329 Successfully built mbox2m365 2023-10-22T23:52:20,333 Removed build tracker: '/tmp/pip-build-tracker-7655de43'