-
-
Save sriccio/1bd635237ca5fcb4504f4e016f9b0517 to your computer and use it in GitHub Desktop.
Export all SmarterMail users, aliases, mailinglists for every domain and domain aliases
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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