Skip to content

Instantly share code, notes, and snippets.

@sriccio
Created January 19, 2024 05:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sriccio/1bd635237ca5fcb4504f4e016f9b0517 to your computer and use it in GitHub Desktop.
Save sriccio/1bd635237ca5fcb4504f4e016f9b0517 to your computer and use it in GitHub Desktop.
Export all SmarterMail users, aliases, mailinglists for every domain and domain aliases
#!/bin/env python3
# Uses a slightly modded SM API Wrapper - https://github.com/sriccio/SmarterToolsPythonWrapper/tree/some_stuff
from smapi import SMAPI
#
# Set your SmarterMail server url and admin credentials here
#
SM_URL = "https://your.sm.server"
ADMIN_USER = "admin"
ADMIN_PW = "password"
# Auth to SM API as server admin
me = SMAPI(ADMIN_USER, ADMIN_PW, SM_URL)
# Get list of existing domains
try:
domains = me._get("/api/v1/settings/sysadmin/domain-names")["data"]
except Exception as e:
print(f"ERROR: An error occurred while getting a list of existing domains: {e}")
exit(1)
# Loop over domains
for domain in domains:
sm_domain_header = {"X-SmarterMailDomain": domain}
# Get domain "domain aliases"
domain_aliases = me._get("/api/v1/settings/domain/domain-aliases", other_headers=sm_domain_header)['domainAliasData']
# Get domain "users and aliases"
post_data = {"skip": 0, "take": 10000, "search": None, "sortField": "userName", "sortDescending": False, "searchFlags": ['users', 'aliases']}
domain_users = me._post("/api/v1/settings/domain/account-list-search", other_headers=sm_domain_header, data=post_data)['results']
# Get domain "mailinglists"
domain_lists = me._get("/api/v1/settings/domain/mailing-lists/list", other_headers=sm_domain_header)['items']
# Print user@domain
for domain_user in domain_users:
print(f"{domain_user['userName']}@{domain}")
if domain_lists:
for domain_list in domain_lists:
print(f"{domain_list['listAddress']}@{domain}")
# print user@domain_alias (if any)
if domain_aliases:
for domain_alias in domain_aliases:
for domain_user in domain_users:
print(f"{domain_user['userName']}@{domain_alias['name']}")
if domain_lists:
for domain_list in domain_lists:
print(f"{domain_list['listAddress']}@{domain_alias['name']}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment