NAME
Mail::Folder::Emaul - An Emaul folder interface for Mail::Folder.
WARNING: This code is in alpha release. Expect the interface to change.
SYNOPSIS
use Mail::Folder::Emaul;
DESCRIPTION
This module provides an interface to the emaul folder mechanism. It is currently intended to be used as an example of hooking a folder interface into Mail::Folder.
The folder structure of Emaul is styled after mh. It uses directories for folders and numerically-named files for the individual mail messages. The current message for a particular folder is stored in a file .current_msg in the folder directory.
Folder locking is accomplished through the use of a .lock file in the folder directory.
If a Timeout option is specified when the object is created, that value will be used to determine the timeout for attempting to aquire a folder lock. The default is 10 seconds.
METHODS
open($folder_name)
Populates the Mail::Folder object with information about the folder.
Call the superclass
openmethod.Make sure it is a valid mbox folder.
Check to see it it is readonly
Lock the folder if it is not readonly. (This is dubious)
For every message file in the
$folder_namedirectory, add the message_number to the list of messages in the object.Load the contents of
$folder_dir/.current_msginto$self->{Current}.Set
current_message.Load message labels.
Unlock the folder if it is not readonly.
sync
Flushes any pending changes out to the original folder.
Call the superclass
syncmethod.Return
-1if the folder is readonly.Return
-1if the folder cannot be locked.Scan the folder directory for message files that were not present the last time the folder was either
opened orsynced and absorb them.For every pending delete, unlink that file in the folder directory
Clear out the 'pending delete' list.
Update the
.current_msgfile and the.msg_labelsfile if theNotMUAoption is not set.Return the number of new messages found.
pack
Calls the superclass pack method.
Return 0 if the folder is readonly.
Return 0 if the folder cannot be locked.
Renames the message files in the folder so that there are no gaps in the numbering sequence. It will tweak current_message accordingly.
Old deleted message files (ones that start with ,) are also renamed as necessary.
It will abandon the operation and return 0 if a rename fails, otherwise it returns 1.
Please note that pack acts on the real folder.
get_message($msg_number)
Calls the superclass get_message method.
Retrieves the given mail message file into a Mail::Internet object reference and returns the reference.
It will coerce the From_ field into a Mail-From field, add the 'seen' label to the message, remove the Content-Length field if present, and cache the header.
Returns undef on failure.
get_message_file($msg_number)
Calls the superclass get_message_file method.
Retrieves the given mail message file and returns the name of the file.
Returns undef on failure.
get_header($msg_number)
Calls the superclass get_header method.
If the particular header has never been retrieved then get_header loads the header of the given mail message into a member of $self->{Messages}{$msg_number} and returns the object reference
If the header for the given mail message has already been retrieved in a prior call to get_header, then the cached entry is returned.
The Content-Length field is deleted from the header object it returns.
append_message($mref)
Calls the superclass append_message method.
Returns 0 if it cannot lock the folder.
Appends the contents of the mail message contained $mref to the the folder.
It also caches the header.
Please note that, contrary to other documentation for Mail::Folder, the Emaul append_message method actually updates the real folder, rather than queueing it up for a subsequent sync. The dup and refile methods are also affected. This will be fixed soon.
update_message($msg_number, $mref)
Calls the superclass update_message method.
It returns 0 if it cannot lock the folder.
Replaces the message pointed to by $msg_number with the contents of the Mail::Internet object reference $mref.
Please note that, contrary to other documentation for Mail::Folder, the Emaul update_message method actually updates the real folder, rather than queueing it up for a subsequent sync. This will be fixed soon.
is_valid_folder_format($foldername)
Returns 0 if the folder is not a directory or looks like a maildir folder. The current logic allows it to handle MH directories, but watch out; you should probably set the NotMUA option so the interface doesn't create it's own little folder droppings like .msg_labels and such.
create($foldername)
Returns 0 if the folder already exists.
Creates a new folder named $foldername with mode 0700 and then returns 1.
AUTHOR
Kevin Johnson <kjj@pobox.com>
COPYRIGHT
Copyright (c) 1996-1998 Kevin Johnson <kjj@pobox.com>.
All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.