Mailing lists
Mail lists allow people with common interests to exchange mail quickly and easily
Warning: Your messages may be widely distributed
Take care with what you write and how you say things as messages will be sent to all of the mailing list's subscribers, potentially thousands of people.
The Sympa mailing list service is open to members of the University of Oxford who wish to use mailing lists relating to the academic, cultural and social life of the University.
Transmission of unsolicited commercial or advertising material is not permitted and you must abide by the University IT regulations and JANET acceptable use policy.
The following list commands can be performed by sending mail using the stated email address format, replacing listname with the name of the list.
Email all list subscribers | listname@maillist.ox.ac.uk |
Email the list manager | listname-owner@maillist.ox.ac.uk |
Subscribe to a list | listname-subscribe@maillist.ox.ac.uk |
Unsubscribe from a list | listname-unsubscribe@maillist.ox.ac.uk |
Get information about a list | listname-info@maillist.ox.ac.uk |
Get mailing list help | listname-help@maillist.ox.ac.uk |
You can also manage your lists and subscriptions through the mailing list manager.
To manage your mailing list subscriptions:
- Access the Sympa mailing list manager
- On the Home tab, your subscriptions are displayed on the left hand side
- Selecting a list will display a number of options:
Subscriber Options Set how you receive messages from the list Unsubscribe Unsubscribe from the list Info General information, such as the list name Admin Functions available to the list owners Moderate Functions available to the list moderators Archive View previous list messages Post Send a message to list Review Members View the list's subscribers
To suspend messages or unsubscribe from a mailing list:
- Access the Sympa mailing list manager
- On the Home tab, select Manage Your Subscriptions on the left hand side
- Tick the mailing lists you wish to update
- Select the option to either suspend the subscriptions or unsubscribe completely
If the list is set to prevent these actions you will need to contact the list owners, displayed when you select the Home tab, then select the list on the left hand side.
To request a new mailing list:
- Access the Sympa mailing list manager
- Select the Create List tab
- Provide the following details:
Name
Used as the email prefix for the mail list Configuration A predefined list type, this can be updated after the list is created Subject A brief description of the list Category Clubs and Societies, Colleges, or Departments Description A description of the list
Requirements:
- A list must have at least one privileged owner of the following type:
- A University member with a card status able to own a mailing list
- A project account with its own SSO account
-
A club or society account with its own SSO account
- The list's subject matter must relate to the academic, administrative, social or cultural life of the University.
- The majority of members and list traffic should be internal to the University. The list must not be a general world wide mail list service.
If your list does not meet the requirements, several sites such as JiscMail and Google Groups also offer mailing lists.
The privileged owners of a mailing list, or Local IT support staff may request its name is updated through the 'Rename or Delete Mailing List' service request in IT self service. The list's email address will also be updated.
The owners of a mailing list can update the list's subscribers in the following way:
- Access the Sympa mailing list manager
- On the Home tab, select the mailing list on the left hand side
- Select Admin > Manage Subscribers tab
Note:
- Subscription notifications will be sent to the subscriber unless quiet is selected
- Owners can check why addresses were added or removed at Admin > Logs
- Privileged owners can update subscription options at Admin > List Config tab > Privileges
The privileged owners of a mailing list can update the list's owners and moderators in the following way:
- Access the Sympa mailing list manager
- On the Home tab, select the mailing list on the left hand side
- Select Admin > List Config tab > List definition
Note:
- You can also only add one new owner at a time
- At least one owner must be present, you cannot delete the last one
- To remove an entry, delete the details then select Update at the bottom of the screen
- If changing your own status from privileged, make sure to apply all other changes before you update your status
The privileged owners of a mailing list can update who can post to it in the following way:
- Access the Sympa mailing list manager
- On the Home tab, select the mailing list on the left hand side
- Select Admin > List Config tab > Sending/receiving setup
- The Who can send messages dropdown's most common options are:
Public Anyone may post Restricted to subscribers Only subscribers may post Moderated Messages must be approved (a moderator must also be set) Self moderation To protect against forged messages the sender must confirm an email Whitelist Allowed senders must be specified at Admin > Whitelist
- Addresses specified at Admin > Blacklist are prevented from posting messages
The privileged owners of a mailing list can update the list's message templates, such as its welcome message:
- Access the Sympa mailing list manager
- On the Home tab, select the mailing list on the left hand side
- Select Admin > Customising tab
Note:
- Do not edit the variable place holders enclosed in [% %] as this will stop the templates from working properly
The privileged owners of the mailing list, or Local IT support staff may request its name is updated through the 'Rename or Delete Mailing List' service request in IT self service.
A mailing list without an eligible privileged owner will also be deleted automatically if a replacement cannot be found.
To recover a deleted mailing list please contact the Service Desk.
Each mailing list can have members with the following roles:
Subscriber |
Receive messages sent to the mailing list and can update their subscription |
Moderator |
Approve or reject a moderated list's messages or subscriptions |
Owner |
Update subscribers and some list settings |
Privileged owner |
Update subscribers and list settings |
Privileged owners can add another mailing list as a subscriber, allowing mail sent to the list to also be sent to subscribers of the other list.
When using nested lists:
- Access the Sympa mailing list manager
- On the Home tab, select the mailing list on the left hand side
- Select Admin > List Config tab > Sending / receiving setup
- Ensure Require the list address to appear in the To or CC fields is set to off.
Note:
- The posting restrictions of the list will still apply, so the parent list may need to be authorised or require moderation.
Sometimes a message sent to a mailing list will generate a failure message. Bounce messages contain the reason for the bounce, but can look complicated, some example reasons being:
- Only whitelisted addresses can post and the sender's address is not in the whitelist
- Only subscribers can post and the sender's address is not subscribed
- A moderator rejects the message
- The message exceeds the maximum message size, often due to an attachment
- The message has an attachment of a type not allowed
- The list address is in the BCC field
- The message is sent to the wrong address
Owners may also receive notification that the subscriber bounce rate is too high. This is usually because many subscriber addresses have either expired or contain formatting issues such as leading or trailing spaces.
The Admin > Bounces tab can display and reset the bouncing addresses.
College mailing lists
If you need to email Heads of House or other College Officers, please contact Tabitha Schenk (tabitha.schenk@admin.ox.ac.uk) in the Conference of Colleges Secretariat, with your name, job title, email address and the group you wish to post to.
Department mailing lists
Designated individuals within UAS can post to lists for the following groups:
- Departmental Administrators
- Departmental Administrators and Personnel Managers
- Divisional and Faculty Boards
- Heads of Department, Division and Pro-Vice-Chancellors
- Combined departmental list
Your local administrators can advise of who in your department can send to these lists. If your role requires you to become a designated user, please email internalcommunications@admin.ox.ac.uk with your name, job title, department, and authorisation from your Head of Department.
For changes in Heads of Department, Faculty Board Chairs, Departmental Administrators and Personnel Administrators, please send the completed 'Request to update mailing lists’ form to hrisdata@admin.ox.ac.uk.
A list without a privileged owner is considered inactive and will be removed if a new privileged owner can not be found. Mail lists that are expected to be available for a long time should have at least one long term member of staff as a privileged owner.
To allow the privileged owner to be updated when a list is due to expire, before the current privileged owner leaves the University the list's current owners, moderators and the privileged owner’s IT support staff will be notified. After five weeks without an owner, the list will be removed and the subscribers informed.
The Sympa mailing list service supports a SOAP interface for programmatic interactions with mailing lists, allowing automatic membership listing, population and depopulation, and manipulation of the whitelist and blacklist.
Example Perl scripts are provided below. We would welcome any other language example to be sent to unix-team@it.ox.ac.uk.
The default SOAP interface is available at:
https://web.maillist.ox.ac.uk/sympasoap/ox
The WSDL is available at:
https://web.maillist.ox.ac.uk/ox/wsdl
In both cases, /ox can be replaced with /admin or /chem if your list is for the maillist.admin.ox.ac.uk or maillist.chem.ox.ac.uk domains respectively.
Credentials are available to registered IT Support Staff and must be requested by sending an email with the following information:
To: unix-team@it.ox.ac.uk
Subject: New maillist SOAP credentials request
In the message body request a set of credentials for accessing the maillist SOAP interface and state the username in the form $unitcode-$servicetype@login.maillist.ox.ac.uk, for example itserv-courses@login.maillist.ox.ac.uk or wolf-boatclub@login.maillist.ox.ac.uk.
A corresponding password will be provided after the credentials are created. The new username can then be added as a list owner of the lists you wish to manage. Please set it no nomail as the login.maillist.ox.ac.uk domain does not receive mail. Also note that usernames ending in '@login.maillist.ox.ac.uk' will only appear in the list of owners if you are an owner of the list yourself.
Integrating Kerberos into Sympa would have involved making some major changes to the core Sympa codebase that are unlikely to be accepted by upstream, meaning IT Services would have to manage the changes locally.
We hope to provide an SSO-protected self-service interface for managing these credentials.
The Perl script examples assume you have the following Perl modules installed:
- SOAP::Lite (available in Debian package libsoap-lite-perl)
- HTTP::Cookies (available in Debian package libhttp-cookies-perl)
- YAML (available in Debian package libyaml-libyaml-perl)
- List::Compare (available in Debian package liblist-compare-perl)
Call the scripts like: command-to-generate-addresses | script-name or, to read from a file, simply provide it as a command-line argument: script-name /path/to/file.
The scripts also assume you have a YAML configuration file similar to the following:
- email: example-changeme@login.maillist.ox.ac.uk
- password: "my secret password"
- listname: testlist1
- soap_url: https://web.maillist.ox.ac.uk/sympasoap/ox
This example code adds new addresses provided on standard input to the list.
#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; use YAML; my $config_file = "config.yml"; my $config = YAML::LoadFile( $config_file ) or die "Could not load config file\n"; # Use a specific cookie jar so logins work - logging in sets a cookie my $cookie_jar = HTTP::Cookies->new(); # If set to false or not set will send the user a 'welcome to the list' # message. my $quiet = "true"; # force outgoing connections to come from a specific interface by setting local_address my $soap = SOAP::Lite->proxy($config->{soap_url}, cookie_jar => $cookie_jar ); $soap->default_ns('urn:sympasoap'); # log in my $som = $soap->login($config->{email}, $config->{password}); die $som->faultstring if ($som->fault); while( my $email = <> ){ chomp( $email ); my $add_object = $soap->add( $config->{listname}, $email, '', $quiet ); if( $add_object->fault ){ die "Error adding $email to $config->{listname}: " . $add_object->faultstring; } else { print "Added $email to $config->{listname}\n"; } }
This example adds all addresses provided on standard input, and removes any not provided.
#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; use YAML; use List::Compare; my $config_file = "config.yml"; my $config = YAML::LoadFile( $config_file ) or die "Could not load config file\n"; # Use a specific cookie jar so logins work - logging in sets a cookie my $cookie_jar = HTTP::Cookies->new(); # If set to false or not set will send the user a 'welcome to the list' # message. my $quiet = "true"; my $listname = $config->{listname}; my $soap = SOAP::Lite->proxy($config->{soap_url}, cookie_jar => $cookie_jar ); $soap->default_ns('urn:sympasoap'); my $som = $soap->login($config->{email}, $config->{password}); if ($som->fault) { die $som->faultstring } my $subscribers = $soap->review($listname); if( $subscribers->fault ){ die "Error getting subscribers for $listname: " . $subscribers->faultstring . "\n"; } my @current_subscribers = grep { !/^no_subscribers$/ } @{$subscribers->body()->{reviewResponse}->{return}}; chomp( my @wanted_subscribers = <> ); my $lc = List::Compare->new('--unsorted', \@current_subscribers, \@wanted_subscribers ); # addresses that are in the second list only my @addresses_to_add = $lc->get_complement(); # addresses that are in the first list only my @addresses_to_remove = $lc->get_unique(); foreach my $address ( @addresses_to_add ){ my $add_object = $soap->add($listname, $address, '', $quiet); if( $add_object->fault ){ die "Error adding $address to $listname: " . $add_object->faultstring; } else { print "Added $address to $listname\n"; } } foreach my $address ( @addresses_to_remove ){ my $rem_object = $soap->del($listname, $address, $quiet); if( $rem_object->fault ){ die "Error removing $address from $listname: " . $rem_object->faultstring; } else { print "Removed $address from $listname\n"; } }
This example code adds the lines provided on standard in to the whitelist.
#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; use YAML; my $config_file = "config.yml"; my $config = YAML::LoadFile( $config_file ) or die "Could not load config file\n"; # Use a specific cookie jar so logins work - logging in sets a cookie my $cookie_jar = HTTP::Cookies->new(); my $listname = $config->{listname}; my $soap = SOAP::Lite->proxy($config->{soap_url}, cookie_jar => $cookie_jar ); $soap->default_ns('urn:sympasoap'); # log in my $som = $soap->login($config->{email}, $config->{password}); if ($som->fault) { die $som->faultstring } while( my $line = <> ){ chomp( $line ); my $add_object = $soap->addWhitelist( $config->{listname}, $line ); if( $add_object->fault ){ die "Error adding line to $config->{listname}: " . $add_object->faultstring; } else { if( $add_object->body()->{addWhitelistResponse}->{result} ){ print "Added line '$line' to whitelist of $config->{listname}\n"; } else { print "Did not add line '$line' to whitelist of $config->{listname} as it was already present\n"; } } }
This example adds all lines provided on standard input, and removes any not provided.
#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; use YAML; use List::Compare; my $config_file = "config.yml"; my $config = YAML::LoadFile( $config_file ) or die "Could not load config file\n"; # Use a specific cookie jar so logins work - logging in sets a cookie my $cookie_jar = HTTP::Cookies->new(); my $listname = $config->{listname}; my $soap = SOAP::Lite->proxy($config->{soap_url}, cookie_jar => $cookie_jar ); $soap->default_ns('urn:sympasoap'); # log in my $som = $soap->login($config->{email}, $config->{password}); if ($som->fault) { die $som->faultstring } my $whitelist_object = $soap->getWhitelist($listname); if( $whitelist_object->fault ){ die "Error getting whitelist for $listname: " . $whitelist_object->faultstring . "\n"; } my @current_whitelist = grep { !/^no_lines$/ } @{$whitelist_object->body()->{getWhitelistResponse}->{return}}; chomp( my @wanted_whitelist = <> ); my $lc = List::Compare->new('--unsorted', \@current_whitelist, \@wanted_whitelist ); # lines in the second list only my @lines_to_add = $lc->get_complement(); # lines in the first list only my @lines_to_remove = $lc->get_unique(); foreach my $line ( @lines_to_add ){ my $add_object = $soap->addWhitelist( $config->{listname}, $line ); if( $add_object->fault ){ die "Error adding line to $config->{listname}: " . $add_object->faultstring; } else { if( $add_object->body()->{addWhitelistResponse}->{result} ){ print "Added line '$line' to whitelist of $config->{listname}\n"; } else { print "Did not add line '$line' to whitelist of $config->{listname} as it was already present\n"; } } } foreach my $line ( @lines_to_remove ){ my $del_object = $soap->delWhitelist( $config->{listname}, $line ); if( $del_object->fault ){ die "Error removing line from $config->{listname}: " . $del_object->faultstring; } else { if( $del_object->body()->{delWhitelistResponse}->{result} ){ print "Removed line '$line' from whitelist of $config->{listname}\n"; } else { print "Did not remove line '$line' from whitelist of $config->{listname} as it was already absent\n"; } } }
This removes all entries from the blacklist.
#!/usr/bin/perl use strict; use warnings; use SOAP::Lite; use HTTP::Cookies; use YAML; my $config_file = "config.yml"; my $config = YAML::LoadFile( $config_file ) or die "Could not load config file\n"; # Use a specific cookie jar so logins work - logging in sets a cookie my $cookie_jar = HTTP::Cookies->new(); my $listname = $config->{listname}; my $soap = SOAP::Lite->proxy($config->{soap_url}, cookie_jar => $cookie_jar ); $soap->default_ns('urn:sympasoap'); # log in my $som = $soap->login($config->{email}, $config->{password}); if ($som->fault) { die $som->faultstring } # get all the current lines # Replace Blacklist with Whitelist to do the same for the whitelist my $get_object = $soap->getBlacklist( $config->{listname} ); if( $get_object->fault ){ die "Error getting blacklist for $config->{listname}: " . $get_object->faultstring; } foreach my $line ( @{$get_object->body()->{getBlacklistResponse}->{return}} ){ # As with the subscribers, no_lines means that the list is empty next if $line eq 'no_lines'; my $del_object = $soap->delBlacklist($config->{listname}, $line); if( $del_object->fault ){ die "Could not remove line '$line' from blacklist: " . $del_object->faultstring; } else { if( $del_object->body()->{delBlacklistResponse}->{result} ){ print "Removed line '$line' from blacklist\n"; } else { # this case should never happen, but catch it anyway print "Got line '$line' to remove from blacklist, but could not remove it\n"; } } }
Get support
If you cannot find the solution you need here then we have other ways to get IT support
Submit a suggestion, compliment or complaint