Staff member
Jan 21, 2013
cPanel Access Level
DataCenter Provider
Mailman is a tool that allows you to setup mailing lists. You can use mailman to setup public or private lists. Public lists would be useful for sending out promotional emails to clients, or emails about updates to services. Private mailing lists, on the other hand, are useful if you want to communicate with all employees in a company or only in specific departments. In this guide, I will be going over the scripts found in this software, what they do, and how to resolve some common issues encountered with Mailman.

Mailman Paths

Mailman /usr/local/cpanel/3rdparty/mailman
Lists /usr/local/cpanel/3rdparty/mailman/lists/$MAILINGLIST/
Logs /usr/local/cpanel/3rdparty/mailman/logs/{bounce,error,locks,mischief,post,runner,smtp,smtp-failure,subscribe,vette}
Scripts /usr/local/cpanel/3rdparty/mailman/bin/

Private vs. Public

Private - Mailing list has private archives, are not displayed on mailman interface, and administrators have to approve subscriptions. Useful for internal communications ([email protected], [email protected], [email protected])

Public - Public archives, anyone can subscribe, and is displayed on mailman interface. Useful for customer facing communication ([email protected], [email protected])

cPanel Scripts

The following scripts are all written by cPanel for basic Mailman administration and stored in /scripts/


  1. Checks if mailman is disabled (Checks if skipmailman=1 in /var/cpanel/cpanel.config)
  2. Updates mailman
  3. Fixes permissions on archives and mailing lists.
    Archive directory permissions should be 2750, while archives themselves should be 640. Mailing lists directories should be 2755, while the mailing lists themselves should be 664. The root mailing list directory should have permissions set to 660.
  4. Checks for qfiles (pickle files are the standard mechanism for object serialization) in mailman/qfiles/out and removes as needed
  5. Restarts mailman (/usr/local/cpanel/scripts/restartsrv --wait mailman)


This script is deprecated. Instead, run /usr/local/cpanel/bin/mailman-install --force

/usr/local/cpanel/bin/mailman-install --force

This script is non-destructive. It does not remove existing lists.

  1. Adds mailman user, sets homedir to /usr/local/cpanel/3rdparty/ and sets correct groups on user
  2. Updates python if needed by fetching stable python and compiling from source.
  3. Installs dnspython dependancies after backing up current dnspython install.
    DNSPython is a DNS toolkit for python that supports almost all record types. It is used in queries, zone transfers, and dynamic updates. It provides by high and low level access to DNS.
  4. Sets up mailman cronjob. The cronjob is stored at /usr/local/cpanel/3rdparty/mailman/cron/crontab.in. The cron is set to gzip the archives and remove old entries from the "bad" and "shunt" queue.
  5. Sets correct ownership and permissions on installation.
    Archive directory permissions should be 2750, while archives themselves should be 640. Mailing lists directories should be 2755, while the mailing lists themselves should be 664. The root mailing list directory should have permissions set to 660.


Resets the hostname variable in the mailman configuration to match the hostname of the server. Used after changing the hostname of the server. This script is also ran nightly during /scripts/upcp --cron to prevent broken lists from incorrect hostnames.

Restarts mailman service

Corrects mailman archive permissions. Archive directory permissions should be 2750, while archives themselves should be 640.

Calculates disk space usage of Mailman scripts and adds it to cPanel users total disk space usage.'

Mailman scripts

The following scripts are provided by the mailman software and are all located in /usr/local/cpanel/3rdparty/mailman/bin/

add_members - Add members to a list from the command line.
arch - Rebuild a list's archive.
b4b5-archfix - rebuild archives created in < mailman 2.1b4
change_pw - change a lists password
check_db - Check a list's config database file for integrity
check_perms - Check the permissions for the Mailman installation
cleanarch - Clean up an .mbox archive file
clone_member - Clone a member address
config_list - Configure a list from a text file description
convert.py - Convert a list's interpolation strings from %-strings to $-strings -> ran with withlist
discard - Discard held messages
dumpdb - Dump the contents of any Mailman `database' file
export.py - Export an XML representation of a mailing list
find_member- Find all lists that a member's address is on
fix_url.py - Reset a list's web_page_url attribute to the default setting
genaliases - Regenerate Mailman specific aliases from scratch
inject - Inject a message from a file into Mailman's incoming queue.
list_admins - list all the owners of a mailing list
list_lists - list all mailing lists
list_members - list all members of a list
list_owners - list all owners of a list
mailmanctl - primary start up and shutdown script for qrunner daemon
mmsitepass - set the site password
msgfmt.py - generate binary message catalog for textual translation description
newlist - create a new unpopulated mailing list
paths.py - Tells mailman where to locate mailman installation. Called by other scripts, never used on its own.
qrunner - run one or more runners once or repeatedly
rb-archfix - Reduce disk space usage for Pipermail archives
remove_members - removes member from list
reset_pw.py - reset password for members of mailing list
rmlist - removed the components of a mailing list with impunity
show_qfiles - show the contents of one or more mailman queue files
sync_members - sync a mailing list membership with a flat file
transcheck - ensure variables in translations match templates and catalog
unshunt - move a message from the shunt queue to the original queue
update - perform all necessary upgrades
version - print mailman version
withlist - general framework for interacting with mailing list object

Mailing List Delegation

You can delegate administrative rights on a mailing list to specified list members. Delegates can approve messages that await approval, add and remove members, and act as administrators for a list. To manage the Delegation settings on a mailing list, search for the name of the mailing list that you wish to manage and click the appropriate Delegation link.

How to delegate administrative rights to an additional user

To delegate administrative rights on a mailing list, perform the following steps:

  1. Under Available Users, select the email addresses of the users to whom you wish to delegate administrative rights.
  2. Click the right arrow button
  3. Click Save.

How to remove administrative rights from a user

To remove administrative rights from an address on a mailing list, perform the following steps:

  1. Under List Administrators, select the email addresses of the users from which you wish to remove administrative rights.
  2. Click the left arrow button.
  3. Click Save.

Common Issues and fixes

How do I change links in the Mailman interface to point to mail.example.com instead of example.com?

To point URLs in the Mailman interface to mail.example.com instead of example.com, enable the Prefix "mail." onto Mailman URLs option in WHM's Tweak Settings interface.

What should I do if I get an error that says We hit a bug?

If you get the We hit a bug error message when you access the Mailman interface, check the /usr/local/cpanel/3rdparty/mailman/logs/error file for error messages. Based on the error message in the log, the following steps may resolve the issue:

  1. Use the /script/fixmailman script to resolve common Mailman issues.
  2. Use the /scripts/fixcommonproblems script to correct mailbox permissions, common mailman issues, CGI script issues, NDC and quota issues.
  3. Update cPanel & WHM with the /scripts/upcp script.
  4. To reinstall Mailman, use the /usr/local/cpanel/bin/mailman-install --force command.
  5. Mailman uses Python. If there is an issue with Python, reinstall Python with the /scripts/pythonup --force command.

The requested URL /pipermail/$LIST_NAME/index.html was not found on this server.

Disable Symlink Patch in EasyApache.
  • Like
Reactions: j.centeno


Active Member
Jan 1, 2015
cPanel Access Level
Root Administrator
Thank you so much for this helpful introduction!

I have a question: I will soon be migrating a set of Mailman lists from another, non-CPanel server.

Currently the lists is configured so that the list information page and web links are at the url: lists.example.com -- email is sent and received from [email protected]

I'm a little confused by the WHM tweak settings option - is "mail" the only prefix that can be used? That is, would it be possible for me to create the same settings and list names that I already have?

Or will WHM/CPanel require the use of different naming conventions?

Are there any other potential issues I should be aware of with a list migration?