NAME

Mail::Message::Head::ListGroup - mailinglist related header fields

INHERITANCE

Mail::Message::Head::ListGroup
  is a Mail::Reporter

SYNOPSIS

my $lg = Mail::Message::Head::ListGroup->new(head => $head, ...);
$head->addListGroup($lg);

my $lg = $head->addListGroup(...);

$lg->delete;

DESCRIPTION

A list group is a set of header fields which are added by mailing-list managing software. This class contains various kinds of knowledge about that software.

The knowledge and test messages which are used to initially implement this module is taken from Mail::ListDetector, written by Michael Stevens <mailto:michael@etla.org>. The logic is redesigned to add flexibility and use the powerful MailBox features.

METHODS

Constructors

$obj->clone

Make a copy of this object. The collected fieldnames are copied and the list type information. No deep copy is made for the header: this is only copied as reference.

$obj->from(HEAD|MESSAGE)

Create a Mail::Message::Head::ListGroup based in the specified MESSAGE or message HEAD.

Mail::Message::Head::ListGroup->new(FIELDS, OPTIONS)

Construct an object which maintains one set of mailing list headers. The FIELDS may be specified as Mail::Message::Field objects or as key-value pairs. The OPTIONS and FIELDS (as key-value pair) can be mixed: they are distinguished by their name, where the fields always start with a capital. The field objects must aways lead the OPTIONS.

Option    Defined in       Default               
address                    C<undef>              
head                       C<undef>              
listname                   <derived from address>
log       L<Mail::Reporter>  C<'WARNINGS'>         
rfc                        C<undef>              
software                   C<undef>              
trace     L<Mail::Reporter>  C<'WARNINGS'>         
type                       C<undef>              
version                    C<undef>              

. address STRING|OBJECT

Address of the mailing list, which may be specified as STRING or e-mail containing object (a Mail::Address or Mail::Identity. In any case, the data is converted into a Mail::Identity.

. head HEAD

The header HEAD object is used to store the list fields in. If no header is specified, a Mail::Message::Head::Partial is created for you. If you wish to scan the existing fields in a header, then use the from() method.

. listname STRING

A short textual representation of the mailing-list.

. log LEVEL

. rfc 'rfc2918'|'rfc2369'

Defines the mailing list software follows an rfc.

. software STRING

Name of the software which maintains the mailing list.

. trace LEVEL

. type STRING

Group name for the mailing list software. Often the same, or close to the same STRING, as the software option contains.

. version STRING

Version number for the mailing list software.

The header

$obj->attach(HEAD)

Add a list group to a message HEAD. The fields will be cloned(!) into the header, so that the list group object can be used again.

Example: attaching a list group to a message

my $lg = Mail::Message::Head::ListGroup->new(...);
$lg->attach($msg->head);
$msg->head->addListGroup($lg);   # same

Example: copying list information

if(my $lg = $listmsg->head->listGroup)
{   $msg->head->addListGroup($lg);
}

$obj->delete

Remove all the header lines which are combined in this list group from the header.

$obj->head

Returns the header object, which includes these fields.

Access to the header

$obj->add((FIELD, VALUE) | OBJECT)

Add a field to the header, using the list group. When the list group is already attached to a real message header, it will appear in that one as well as being registed in this set.

Example: adding a field to a detached list group

my $this = Mail::Message::Head::ListGroup->new(...);
$this->add('List-Id' => 'mailbox');
$msg->addListGroup($this);
$msg->send;

Example: adding a field to an attached list group

my $lg = Mail::Message::Head::ListGroup->from($msg);
$lg->add('List-Id' => 'mailbox');

$obj->address

Returns a Mail::Message::Field::Address object (or undef) which defines the posting address of the mailing list.

$obj->fields

Return the fields which are defined for this list group.

$obj->findListFields

Scan the header for fields which are usually contained in mailing list software. This method is automatically called when a list group is constructed from() an existing header or message.

Returned are the names of the list header fields found, in scalar context the amount. An empty list/zero indicates that this is not a mailing list message.

Please warn the author of MailBox if you see that to few or too many fields are included.

$obj->listname

Returns the name of the mailing list, which is usually a part of the e-mail address which is used to post the messages to.

$obj->rfc

When the mailing list software follows the guidelines of one of the dedictated RFCs, then this will be returned otherwise undef. The return values can be rfc2918, rfc2369, or undef.

$obj->software

Returns the name of the software as is defined in the headers. The may be slightly different from the return value of type(), but usually not too different.

$obj->type

Returns an abstract name for the list group; which mailing software is controling it. undef is returned in case the type is not known, and the other names are listed in "Detected lists".

$obj->version

Returns the version number of the software used by the mailing list software. This is ofthen not known, in which case undef will be returned.

Error handling

$obj->AUTOLOAD

See "Error handling" in Mail::Reporter

$obj->defaultTrace([LEVEL, [LEVEL])

Mail::Message::Head::ListGroup->defaultTrace([LEVEL, [LEVEL])

See "Error handling" in Mail::Reporter

$obj->details

Produce information about the detected/create list group, which may be helpful during debugging, by default to the selected file handle.

$obj->errors

See "Error handling" in Mail::Reporter

$obj->log([LEVEL [,STRINGS]])

Mail::Message::Head::ListGroup->log([LEVEL [,STRINGS]])

See "Error handling" in Mail::Reporter

$obj->logPriority(LEVEL)

Mail::Message::Head::ListGroup->logPriority(LEVEL)

See "Error handling" in Mail::Reporter

$obj->logSettings

See "Error handling" in Mail::Reporter

$obj->notImplemented

See "Error handling" in Mail::Reporter

$obj->print([FILEHANDLE])

Print the group to the specified FILEHANDLE or GLOB. This is probably only useful for debugging purposed. The output defaults to the selected file handle.

$obj->report([LEVEL])

See "Error handling" in Mail::Reporter

$obj->reportAll([LEVEL])

See "Error handling" in Mail::Reporter

$obj->trace([LEVEL])

See "Error handling" in Mail::Reporter

$obj->warnings

See "Error handling" in Mail::Reporter

Cleanup

$obj->DESTROY

See "Cleanup" in Mail::Reporter

$obj->inGlobalDestruction

See "Cleanup" in Mail::Reporter

DIAGNOSTICS

Error: Cannot convert "$string" into an address object

The new(address) is coerced into a Mail::Message::Field::Address, which fails. Have a look at Mail::Message::Field::Address::coerce() to see what valid arguments are.

Error: Package $package does not implement $method.

Fatal error: the specific package (or one of its superclasses) does not implement this method where it should. This message means that some other related classes do implement this method however the class at hand does not. Probably you should investigate this and probably inform the author of the package.

DETAILS

Mailing list fields

Detected lists

The Mail::Message::Head::ListGroup class can detect many different mailing lists, some of which are very popular and some of which are rare.

Numerous fields in a header are addded when the message is passed through a mailing list server. Each list software has defined its own fields, sometimes woth conflicting definitions. There are also two RFCs about mailing list: rfc2918 and rfc2369.

The following lists are currently detected. Between parenthesis is the string returned by type() when that differs from the software name.

REFERENCES

See the MailBox website at http://perl.overmeer.net/mailbox/ for more details.

COPYRIGHTS

Distribution version 2.044. Written by Mark Overmeer (mark@overmeer.net). See the ChangeLog for other contributors.

Copyright (c) 2001-2003 by the author(s). All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.