Mailing lists

Mail lists

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.

Expand All

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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, your subscriptions are displayed on the left hand side
  3. 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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select Manage Your Subscriptions on the left hand side
  3. Tick the mailing lists you wish to update
  4. 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:

  1. Access the Sympa mailing list manager
  2. Select the Create List tab
  3. 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:
  • 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 may request its name is updated through 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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select the mailing list on the left hand side
  3. 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 AdminLogs
  • Privileged owners can update subscription options at AdminList Config tab > Privileges

The privileged owners of a mailing list can update the list's owners and moderators in the following way:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select the mailing list on the left hand side
  3. 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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select the mailing list on the left hand side
  3. Select Admin > List Config tab > Sending/receiving setup
  4. 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
Note:
  • 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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select the mailing list on the left hand side
  3. Select Admin > Customising tab

Note:

  • Do not edit the variable place holders enclosed in [%   %] as this will stop the templates from working properly

A list's privileged owner may request its deletion through 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:

  1. Access the Sympa mailing list manager
  2. On the Home tab, select the mailing list on the left hand side
  3. Select Admin > List Config tab > Sending / receiving setup
  4. 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.

Automation

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.

Expand All

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:

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

Get IT support