mirror of
https://git.code.sf.net/p/archivemail/code
synced 2024-12-22 07:42:55 +00:00
d706409c59
flock() locks aren't portable; lockf() locks are.
448 lines
15 KiB
Groff
448 lines
15 KiB
Groff
.\" This manpage has been automatically generated by docbook2man
|
|
.\" from a DocBook document. This tool can be found at:
|
|
.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/>
|
|
.\" Please send any bug reports, improvements, comments, patches,
|
|
.\" etc. to Steve Cheng <steve@ggi-project.org>.
|
|
.TH "ARCHIVEMAIL" "1" "03 March 2009" "SP" ""
|
|
|
|
.SH NAME
|
|
archivemail \- archive and compress your old email
|
|
.SH SYNOPSIS
|
|
|
|
\fBarchivemail\fR [ \fBoptions\fR ] \fB\fIMAILBOX\fB\fR\fI ...\fR
|
|
|
|
.SH "DESCRIPTION"
|
|
.PP
|
|
archivemail is a tool for archiving and compressing old email in mailboxes.
|
|
By default it will read the mailbox \fIMAILBOX\fR, moving messages
|
|
that are older that the specified number of days (180 by default) to a
|
|
\fBmbox\fR(5)-format mailbox in the same directory that is compressed
|
|
with \fBgzip\fR(1)\&.
|
|
It can also just delete old email rather than archive it.
|
|
.PP
|
|
\fBarchivemail\fR supports reading \fBIMAP\fR,
|
|
\fBMaildir\fR, \fBMH\fR and \fBmbox\fR-format
|
|
mailboxes, but always writes \fBmbox\fR-format archives.
|
|
.PP
|
|
Messages that are flagged important are not archived or deleted unless
|
|
explicitely requested with the \fB--include-flagged\fR option.
|
|
Also, \fBarchivemail\fR can be configured not to archive unread mail, or
|
|
to only archive messages larger than a specified size.
|
|
.PP
|
|
To archive an \fBIMAP\fR-format mailbox, use the format
|
|
\fIimap://username:password@server/mailbox\fR to specify the mailbox.
|
|
You can omit the password from the URL; use the
|
|
\fB--pwfile\fR option to make \fBarchivemail\fR read the
|
|
password from a file, or alternatively just enter it upon request.
|
|
If the \fB--pwfile\fR option is set, \fBarchivemail\fR does not
|
|
look for a password in the URL, and the colon is not considered a
|
|
delimiter.
|
|
Substitute '\fBimap\fR\&' with '\fBimaps\fR\&', and
|
|
\fBarchivemail\fR will establish a secure SSL connection.
|
|
See below for more \fBIMAP\fR peculiarities.
|
|
.PP
|
|
\fBarchivemail\fR has some support for being run as the root user on
|
|
user mailboxes. When running as root, it will \fBseteuid\fR(2) to the owner of the
|
|
mailbox it is reading, creating any archive files as that user.
|
|
\fBWarning:\fR
|
|
this automatic seteuid feature is insecure and deprecated.
|
|
It will be removed from later versions of \fBarchivemail\fR\&.
|
|
.SH "OPTIONS"
|
|
.TP
|
|
\fB -d \fINUM\fB, --days=\fINUM\fB\fR
|
|
Archive messages older than \fINUM\fR days.
|
|
The default is 180. This option is incompatible with the
|
|
\fB--date\fR option below.
|
|
.TP
|
|
\fB -D \fIDATE\fB, --date=\fIDATE\fB\fR
|
|
Archive messages older than \fIDATE\fR\&.
|
|
\fIDATE\fR can be a date string in ISO format (eg '2002-04-23'),
|
|
Internet format (eg '23 Apr 2002') or Internet format with full month names
|
|
(eg '23 April 2002'). Two-digit years are not supported.
|
|
This option is incompatible with the \fB--days\fR option above.
|
|
.TP
|
|
\fB -o \fIPATH\fB, --output-dir=\fIPATH\fB\fR
|
|
Use the directory name \fIPATH\fR to store the
|
|
mailbox archives. The default is the same directory as the mailbox to be
|
|
read.
|
|
.TP
|
|
\fB -P \fIFILE\fB, --pwfile=\fIFILE\fB\fR
|
|
Read IMAP password from file \fIFILE\fR
|
|
instead of from the command line. Note that this will probably not work if you
|
|
are archiving folders from more than one IMAP account.
|
|
.TP
|
|
\fB -F \fISTRING\fB, --filter-append=\fISTRING\fB\fR
|
|
Append \fISTRING\fR to the IMAP filter string.
|
|
For IMAP wizards.
|
|
.TP
|
|
\fB -s \fINAME\fB, --suffix=\fINAME\fB\fR
|
|
Use the suffix \fINAME\fR to create the filename used for archives.
|
|
The default is \fI_archive\fR\&. For example, if you
|
|
run \fBarchivemail\fR on a mailbox called
|
|
\fIexsouthrock\fR, the archive will be created
|
|
with the filename \fIexsouthrock_archive.gz\fR\&.
|
|
|
|
\fINAME\fR is run through the \fBpython\fR(1) \fBtime.strftime()\fR
|
|
function, which means that you can specify any of the following special
|
|
directives in \fINAME\fR to make archives named after the archive
|
|
cut-off date:
|
|
.RS
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%a\fR
|
|
Locale's abbreviated weekday name.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%A\fR
|
|
Locale's full weekday name.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%b\fR
|
|
Locale's abbreviated month name.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%B\fR
|
|
Locale's full month name.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%c\fR
|
|
Locale's appropriate date and time representation.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%d\fR
|
|
Day of the month as a decimal number [01,31].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%H\fR
|
|
Hour (24-hour clock) as a decimal number [00,23].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%I\fR
|
|
Hour (12-hour clock) as a decimal number [01,12].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%j\fR
|
|
Day of the year as a decimal number [001,366].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%m\fR
|
|
Month as a decimal number [01,12].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%M\fR
|
|
Minute as a decimal number [00,59].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%p\fR
|
|
Locale's equivalent of either AM or PM.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%S\fR
|
|
Second as a decimal number [00,61]. (1)
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%U\fR
|
|
Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%w\fR
|
|
Weekday as a decimal number [0(Sunday),6].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%W\fR
|
|
Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%x\fR
|
|
Locale's appropriate date representation.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%X\fR
|
|
Locale's appropriate time representation.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%y\fR
|
|
Year without century as a decimal number [00,99].
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%Y\fR
|
|
Year with century as a decimal number.
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%Z\fR
|
|
Time zone name (or by no characters if no time zone exists).
|
|
.TP 0.2i
|
|
\(bu
|
|
\fB%%\fR
|
|
A literal "%" character.
|
|
.RE
|
|
.TP
|
|
\fB -S \fINUM\fB, --size=\fINUM\fB\fR
|
|
Only archive messages that are \fINUM\fR bytes or
|
|
greater.
|
|
.TP
|
|
\fB -n, --dry-run\fR
|
|
Don't write to any files -- just show what would have been done. This is
|
|
useful for testing to see how many messages would have been archived.
|
|
.TP
|
|
\fB -u, --preserve-unread\fR
|
|
Do not archive any messages that have not yet been read. \fBarchivemail\fR
|
|
determines if a message in a \fBmbox\fR-format or
|
|
\fBMH\fR-format mailbox has been read by looking at the
|
|
\fBStatus\fR header (if it exists). If the status
|
|
header is equal to 'RO' or 'OR' then \fBarchivemail\fR assumes the
|
|
message has been read. \fBarchivemail\fR determines if a
|
|
\fBmaildir\fR message has
|
|
been read by looking at the filename. If the filename contains an 'S' after
|
|
\fI:2,\fR then it assumes the message has been read.
|
|
.TP
|
|
\fB --dont-mangle\fR
|
|
Do not mangle lines in message bodies beginning with "From ". When archiving
|
|
a message from a mailbox not in \fBmbox\fR format, by default
|
|
\fBarchivemail\fR mangles such lines by prepending a '>' to them, since mail
|
|
user agents might otherwise interpret these lines as message separators.
|
|
Messages from \fBmbox\fR folders are never mangled. See \fBmbox\fR(5) for more
|
|
information.
|
|
.TP
|
|
\fB --delete\fR
|
|
Delete rather than archive old mail. Use this option with caution!
|
|
.TP
|
|
\fB --copy\fR
|
|
Copy rather than archive old mail.
|
|
Creates an archive, but the archived messages are not deleted from the
|
|
originating mailbox, which is left unchanged.
|
|
This is a complement to the \fB--delete\fR option, and mainly useful for
|
|
testing purposes.
|
|
Note that multiple passes will create duplicates, since messages are blindly
|
|
appended to an existing archive.
|
|
.TP
|
|
\fB --all\fR
|
|
Archive all messages, without distinction.
|
|
.TP
|
|
\fB --include-flagged\fR
|
|
Normally messages that are flagged important are not archived or deleted. If
|
|
you specify this option, these messages can be archived or deleted just like
|
|
any other message.
|
|
.TP
|
|
\fB --no-compress\fR
|
|
Do not compress any archives.
|
|
.TP
|
|
\fB --warn-duplicate\fR
|
|
Warn about duplicate \fBMessage-ID\fRs that appear in the input
|
|
mailbox.
|
|
.TP
|
|
\fB -v, --verbose\fR
|
|
Reports lots of extra debugging information about what is going on.
|
|
.TP
|
|
\fB --debug-imap=\fINUM\fB\fR
|
|
Set IMAP debugging level. This makes \fBarchivemail\fR dump its
|
|
conversation with the IMAP server and some internal IMAP
|
|
processing to stdout\&. Higher values for \fINUM\fR give more
|
|
elaborate output. Set \fINUM\fR to 4 to see all exchanged
|
|
IMAP commands. (Actually, \fINUM\fR is just passed
|
|
literally to imaplib.Debug\&.)
|
|
.TP
|
|
\fB -q, --quiet\fR
|
|
Turns on quiet mode. Do not print any statistics about how many messages were
|
|
archived. This should be used if you are running \fBarchivemail\fR from
|
|
cron.
|
|
.TP
|
|
\fB -V, --version\fR
|
|
Display the version of \fBarchivemail\fR and exit.
|
|
.TP
|
|
\fB -h, --help\fR
|
|
Display brief summary information about how to run \fBarchivemail\fR\&.
|
|
.SH "NOTES"
|
|
.PP
|
|
\fBarchivemail\fR requires \fBpython\fR(1) version 2.3 or later.
|
|
When reading an \fBmbox\fR-format mailbox, \fBarchivemail\fR will
|
|
create a lockfile with the extension \fI\&.lock\fR so that
|
|
procmail will not deliver to the mailbox while it is being processed. It will
|
|
also create an advisory lock on the mailbox using \fBlockf\fR(2)\&.
|
|
\fBarchivemail\fR will also complain and abort if a 3rd-party modifies the
|
|
mailbox while it is being read.
|
|
.PP
|
|
\fBarchivemail\fR will always attempt to preserve the mode,
|
|
last-access and last-modify times of the input mailbox. However, archive
|
|
mailboxes are always created with a mode of \fB0600\fR\&.
|
|
If \fBarchivemail\fR finds a pre-existing archive mailbox it
|
|
will append rather than overwrite that archive.
|
|
\fBarchivemail\fR will refuse to operate on mailboxes that are symbolic
|
|
links or create tempfiles or archives in world-writable directories.
|
|
.PP
|
|
\fBarchivemail\fR attempts to find the delivery date of a message by
|
|
looking for valid dates in the following headers, in order of precedence:
|
|
\fBDelivery-date\fR,
|
|
\fBReceived\fR,
|
|
\fBResent-Date\fR and
|
|
\fBDate\fR\&.
|
|
If it cannot find any valid date in these headers, it
|
|
will use the last-modified file timestamp on \fBMH\fR and
|
|
\fBMaildir\fR format mailboxes, or the date on the
|
|
\fBFrom\fR line on \fBmbox\fR-format mailboxes.
|
|
.PP
|
|
A conversion from other formats to \fBmbox\fR(5) will silently overwrite existing
|
|
\fBStatus\fR and \fBX-Status\fR message headers.
|
|
.SS "IMAP"
|
|
.PP
|
|
When \fBarchivemail\fR processes an \fBIMAP\fR folder, all messages
|
|
in that folder will have their \\Recent flag unset, and they will
|
|
probably not show up as 'new' in your user agent later on.
|
|
There is no way around this, it's just how \fBIMAP\fR works.
|
|
This does not apply, however, if you run \fBarchivemail\fR with the options
|
|
\fB--dry-run\fR or \fB--copy\fR\&.
|
|
.PP
|
|
\fBarchivemail\fR relies on server-side searches to determine the messages
|
|
that should be archived.
|
|
When matching message dates, \fBIMAP\fR servers refer to server internal
|
|
message dates, and these may differ from both delivery time of a message and
|
|
its \fBDate\fR header.
|
|
Also, there exist broken servers which do not implement server side searches.
|
|
.SS "IMAP URLS"
|
|
.PP
|
|
\fBarchivemail\fR\&'s \fBIMAP\fR URL parser was written
|
|
with the RFC 2882 (\fIInternet Message
|
|
Format\fR) rules for the local-part of email addresses
|
|
in mind.
|
|
So, rather than enforcing an URL-style encoding of non-ascii
|
|
and reserved characters, it allows to double-quote the username and password.
|
|
If your username or password contains the delimiter characters '@' or ':', just
|
|
quote it like this:
|
|
\fIimap://"username@bogus.com":"password"@imap.bogus.com/mailbox\fR\&.
|
|
You can use a backslash to escape double-quotes that are part of a quoted
|
|
username or password.
|
|
Note that quoting only a substring will not work, and be aware that your shell
|
|
will probably remove unprotected quotes or backslashes.
|
|
.PP
|
|
\fBarchivemail\fR tries to be smart when handling mailbox paths.
|
|
In particular, it will automatically add an IMAP NAMESPACE
|
|
prefix to the mailbox path if necessary; and if you are archiving a subfolder,
|
|
you can use the slash as a path separator instead of the IMAP server's
|
|
internal representation.
|
|
.SH "EXAMPLES"
|
|
.PP
|
|
.PP
|
|
To archive all messages in the mailbox \fIdebian-user\fR that
|
|
are older than 180 days to a compressed mailbox called
|
|
\fIdebian-user_archive.gz\fR in the current directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail debian-user\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all messages in the mailbox \fIdebian-user\fR that
|
|
are older than 180 days to a compressed mailbox called
|
|
\fIdebian-user_October_2001.gz\fR (where the current month and
|
|
year is April, 2002) in the current directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --suffix '_%B_%Y' debian-user\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all messages in the mailbox \fIcm-melb\fR that
|
|
are older than the first of January 2002 to a compressed mailbox called
|
|
\fIcm-melb_archive.gz\fR in the current directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --date'1 Jan 2002' cm-melb\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
Exactly the same as the above example, using an ISO date format instead:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --date=2002-01-01 cm-melb\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To delete all messages in the mailbox \fIspam\fR that
|
|
are older than 30 days:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --delete --days=30 spam\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all read messages in the mailbox \fIincoming\fR that
|
|
are older than 180 days to a compressed mailbox called
|
|
\fIincoming_archive.gz\fR in the current directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --preserve-unread incoming\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all messages in the mailbox \fIreceived\fR that
|
|
are older than 180 days to an uncompressed mailbox called
|
|
\fIreceived_archive\fR in the current directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail --no-compress received\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all mailboxes in the directory \fI$HOME/Mail\fR
|
|
that are older than 90 days to compressed mailboxes in the
|
|
\fI$HOME/Mail/Archive\fR directory:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail -d90 -o $HOME/Mail/Archive $HOME/Mail/*\fR
|
|
.fi
|
|
.PP
|
|
.PP
|
|
To archive all mails older than 180 days from the given \fBIMAP\fR
|
|
INBOX to a compressed mailbox INBOX_archive.gz in the
|
|
\fI$HOME/Mail/Archive\fR directory, quoting the password and
|
|
reading it from the environment variable \fBPASSWORD\fR:
|
|
|
|
.nf
|
|
bash$ \fBarchivemail -o $HOME/Mail/Archive imaps://user:'"'$PASSWORD'"'@example.org/INBOX\fR
|
|
.fi
|
|
.PP
|
|
Note the protected quotes.
|
|
.SH "TIPS"
|
|
.PP
|
|
Probably the best way to run \fBarchivemail\fR is from your \fBcrontab\fR(5)
|
|
file, using the \fB--quiet\fR option.
|
|
Don't forget to try the \fB--dry-run\fR and perhaps the
|
|
\fB--copy\fR option for non-destructive testing.
|
|
.SH "EXIT STATUS"
|
|
.PP
|
|
Normally the exit status is 0. Nonzero indicates an unexpected error.
|
|
.SH "BUGS"
|
|
.PP
|
|
If an \fBIMAP\fR mailbox path contains slashes, the archive filename
|
|
will be derived from the basename of the mailbox.
|
|
If the server's folder separator differs from the Unix slash and is used in the
|
|
\fBIMAP\fR URL, however, the whole path will be considered
|
|
the basename of the mailbox.
|
|
E.g. the two URLs
|
|
\fBimap://user@example.com/folder/subfolder\fR and
|
|
\fBimap://user@example.com/folder.subfolder\fR will be
|
|
archived in \fIsubfolder_archive.gz\fR and
|
|
\fIfolder.subfolder_archive.gz\fR, respectively, although they
|
|
might refer to the same \fBIMAP\fR mailbox.
|
|
.PP
|
|
\fBarchivemail\fR does not support reading \fBMMDF\fR or
|
|
\fBBabyl\fR-format mailboxes. In fact, it will probably think it is
|
|
reading an \fBmbox\fR-format mailbox and cause all sorts of problems.
|
|
.PP
|
|
\fBarchivemail\fR is still too slow, but if you are running from \fBcrontab\fR(5)
|
|
you won't care. Archiving \fBmaildir\fR-format mailboxes should be
|
|
a lot quicker than \fBmbox\fR-format mailboxes since it is less
|
|
painful for the original mailbox to be reconstructed after selective message
|
|
removal.
|
|
.SH "SEE ALSO"
|
|
|
|
\fBpython\fR(1), \fBgzip\fR(1), \fBmutt\fR(1), \fBprocmail\fR(1)
|
|
.SH "URL"
|
|
.PP
|
|
The \fBarchivemail\fR home page is currently hosted at
|
|
sourceforge <URL:http://archivemail.sourceforge.net>
|
|
.SH "AUTHOR"
|
|
.PP
|
|
This manual page was written by Paul Rodger <paul at paulrodger dot
|
|
com>\&. Updated and supplemented by Nikolaus Schulz
|
|
<microschulz@web.de>
|