Interact with mailcow API
Project description
python-mailcow
python-mailcow allows you to interact with the MailCow API. It comes with a cli mailcow.
All arguments for the cli are generated by parsing your MailCow instance's OpenApi schema.
See demo.mailcow.email as OpenAPI scheme example.
This means that you can add, get, edit and delete everything that the MailCow API allows and changes to the API should be usable immediately.
...Famous last words... I know...
BTW: The look and feel of the cli and configuration is inspired by the python-gitlab project.
Installation
- from pypi:
pip install python-mailcow - from github:
pip install git+https://github.com./derJD/python-mailcow.git
Local Build
git checkout mainpython setup.py sdistpip install dist/python-mailcow-9999.999.99.dev9.tar.gz
Usage
quick start
- Generate a API token in the MailCow UI
mailcow --create-example-config- Edit settings in
~/.config/python-mailcow.cfgto match your MailCow UI mailcow --helpshould now show all available options depending on your MailCow API version
Config
python-mailcow read its settings from ~/.config/python-mailcow.cfg.
An example configuration looks like this:
[defaults]
server = mailcow.example.com
ssl_verify = true
timeout = 5
[mailcow.example.com]
url = https://mailcow.example.com
token = 123456-abcde-123456-abcde-123456
| Argument | Type | Description |
|---|---|---|
server |
String | Name of the section providing further server information |
url |
String | Base URL (MailCow UI location) for connection ie: https://demo.mailcow.email |
token |
String | Token for API-Access |
ssl_verify |
Boolean | Enable/Disable ssl verification |
timeout |
Integer | Connection timeout |
CLI
If you installed python-mailcow for the first time you may run following command and change the settings according to your needs:
mailcow --create-example-config
After that you should be able to run commands like these:
mailcow alias get --all/--id 5mailcow alias add --address moep@example.com --goto goto@example.com --no-activemailcow alias delete --items 5
mailcow --help:
usage: test.py [-h] [--create-example-config] [--conf CONF] [--vertical] [--json] [--yaml] [--table] [--debug]
{alias,app-passwd,bcc,dkim,dkim_duplicate,domain,domain-admin,da-acl,domain-policy,fwdhost,mailbox,oauth2-client,recipient_map,relayhost,resource,syncjob,tls-policy-map,transport,mailq,qitem,fail2ban,pushover,quarantine_notification,user-acl,logs,policy_bl_domain,policy_wl_domain,quarantine,rl-mbox,rl-domain,status,syncjobs,spam-score}
...
Interact with mailcows API.
positional arguments:
{alias,app-passwd,bcc,dkim,dkim_duplicate,domain,domain-admin,da-acl,domain-policy,fwdhost,mailbox,oauth2-client,recipient_map,relayhost,resource,syncjob,tls-policy-map,transport,mailq,qitem,fail2ban,pushover,quarantine_notification,user-acl,logs,policy_bl_domain,policy_wl_domain,quarantine,rl-mbox,rl-domain,status,syncjobs,spam-score}
optional arguments:
-h, --help show this help message and exit
--create-example-config
Create configuration file
--conf CONF, -c CONF Defaults to: ~/.config/python-mailcow.conf
--vertical, -v Print (table) results vertically
--json, -j Print results as JSON
--yaml, -y Print results as YAML
--table, -t Print results as Table
--debug, -d Enable debugging
mailcow alias add --help:
usage: mailcow alias add [-h] [--active] [--address ADDRESS] [--goto GOTO] [--goto_ham] [--goto_null] [--goto_spam] [--sogo_visible]
optional arguments:
-h, --help show this help message and exit
--active, --no-active
is alias active or not
--address ADDRESS alias address, for catchall use "@domain.tld"
--goto GOTO destination address, comma separated
--goto_ham, --no-goto_ham
learn as ham
--goto_null, --no-goto_null
silently ignore
--goto_spam, --no-goto_spam
learn as spam
--sogo_visible, --no-sogo_visible
toggle visibility in SoGo
Editing alias' active status and visibility should look like this:
mailcow alias edit --items 78 --active --sogo_visible
+---------+----------------------------------------------------------------------------------------+-------------------------------------------+
| type | log | msg |
+---------+----------------------------------------------------------------------------------------+-------------------------------------------+
| success | ['mailbox', 'edit', 'alias', {'id': ['78'], 'active': '1', 'sogo_visible': '1'}, None] | ['alias_modified', 'example@example.com'] |
+---------+----------------------------------------------------------------------------------------+-------------------------------------------+
python
Class MailCow()
Connect to MailCow instance defined in config file and interact via API Requests
MailCow() takes the same arguments as listed in Config and one additional optional argument:
| Argument | Type | Description |
|---|---|---|
conf |
String | Path to config file |
Every argument is optional and accessible as attribute.
| Attributes | Type | Description |
|---|---|---|
data |
dict/None | Store API responses here and display response via methods as_json, as_yaml, as_table |
json |
dict/None | Store payload for API requests here |
request_url |
string | {url}/api/v1 |
session |
object | Session used for requests |
schema |
dict | Schema retrieved from MailCows OpenApi |
endpoints |
dict | All endpoints from filtered from schema |
Method endpoint(endpoint)
Returns specific endpoint as dict or None
| Argument | Type | Description |
|---|---|---|
| endpoint | string | Name of the endpoint. ie "alias" or "mailbox" |
Method deleteRequest(section, items)
Send delete request
| Argument | Type | Description |
|---|---|---|
| section | string | section aka last part of the url. ie alias |
| items | list | List of items to delete. ie: ['5'] |
Method getRequest(section)
Send get request
| Argument | Type | Description |
|---|---|---|
| section | string | section aka last part of the url. ie alias/all |
Method addRequest(section, json)
Send add request
| Argument | Type | Description |
|---|---|---|
| section | string | section aka last part of the url. ie alias |
| json | dict | attributes send as payload. ie {'active': '1', 'address': 'example@example.com'} |
Method editRequest(section, items, attr, action)
Send edit request
| Argument | Type | Description |
|---|---|---|
| section | string | section aka last part of the url. ie alias |
| items | list | items send as payload .ie ['5'] or ['domain.tld'] |
| attr | dict | attributes send as payload. ie {'active': '1', 'address': 'example@example.com'} |
| action | string | action send as payload. only needed by mailq section .ie flush |
Method as_json()
Return data as json
Method as_yaml()
Return data as yaml
Method as_table(vertical)
Return data as table. vertical expects boolean
| Argument | Type | Description |
|---|---|---|
| vertical | bool | Enable/Disable vertical print of data. Defaults to False |
Example
moo = MailCow()
logs = moo.getRequest(section='logs/api/5')
moo.data = logs
print(moo.as_table())
# returns:
# +------------+----------------------------------+--------+-----------+------+
# | time | uri | method | remote | data |
# +------------+----------------------------------+--------+-----------+------+
# | 1611102437 | /api/v1/get/logs/api/5 | GET | xx.x.xx.x | |
# | 1611096182 | /api/v1/get/rl-mbox/xx@examp.com | GET | xx.x.xx.x | |
# | 1611087846 | /api/v1/get/rl-mbox/xx@examp.com | GET | xx.x.xx.x | |
# | 1611087808 | /api/v1/get/logs/dovecot/5 | GET | xx.x.xx.x | |
# | 1611087797 | /api/v1/get/syncjobs/all/no_log | GET | xx.x.xx.x | |
# +------------+----------------------------------+--------+-----------+------+
License
- Code released under GNU General Public License v3.0 or later
Author
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python-mailcow-1.0.4.tar.gz.
File metadata
- Download URL: python-mailcow-1.0.4.tar.gz
- Upload date:
- Size: 29.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac1b44ec1d3157b2bf53093108b811a4355a2d9c8927b606a6a0d33abb228a1c
|
|
| MD5 |
1805caea6eef8f9bfd924aecd55488e1
|
|
| BLAKE2b-256 |
a1ca4b56d76f1746c0966b9d407f47880326727d694a1fdaf972d4b36d35a6e5
|
File details
Details for the file python_mailcow-1.0.4-py3-none-any.whl.
File metadata
- Download URL: python_mailcow-1.0.4-py3-none-any.whl
- Upload date:
- Size: 26.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b49135fef678894c5e5bfad50b7a6a16849cff02bd15197e7c3b07f0ae46e9a
|
|
| MD5 |
41397533ac5f52e91d22a5a6cdcea4bc
|
|
| BLAKE2b-256 |
ce8194d360be5d5466635246d1a4bdbbff117927ba6ebed3912923853787b6ae
|