Cyrus::Annotator::Daemon - framework for writing annotator daemons for Cyrus
use warnings;
use strict;
package MyAnnotatorDaemon;
use Cyrus::Annotator::Daemon;
our @ISA = qw(Cyrus::Annotator::Daemon);
sub annotate_message
{
my ($self, $message) = @_;
$message->set_flag('\Flagged');
$message->set_shared_annotation('/comment', 'Hello!!');
}
MyAnnotatorDaemon->run();
This module provides a framework for writing daemons which can be used to add
annotations or flags to messages which are delivered into the Cyrus mail
server.
To use Cyrus::Annotator::Daemon, write a Perl script which creates an object
derived from it; see the Synopsis above. Run this script as root, and it will
daemonize itself. Then add this line to the imapd.conf file
annotation_callout: /var/run/annotatord.socket
and restart Cyrus.
Cyrus::Annotator::Daemon has the following methods.
- run(...options...)
- This class method can be used to create an instance of
Cyrus::Annotator::Daemon and to run it's main loop. Note that
Cyrus::Annotator::Daemon derives from Net::Server, and any of that
module's options can be used.
For example:
MyAnnotatorDaemon->run(personality => 'Fork');
Cyrus::Annotator::Daemon changes some of the Net::Server defaults,
including:
- •
- Logging is to syslog using facility local6.
- •
- The network socket is a SOCK_STREAM UNIX domain
socket bound to /var/run/annotatord.socket.
- •
- A PID file is written to
/var/run/annotatord.pid.
- •
- The daemon runs in the background, as user cyrus and
group mail.
- annotate_message($message)
- You need to provide a method of this name. It will be
called whenever Cyrus notifies the annotator daemon that a new message is
available, and may set or clear any flags (system or user flags) or
annotations. Note that to set any annotations which aren't builtin to
Cyrus, you will first need to configure them using
annotation_definitions option in the imapd.conf file.
The $message object is a Cyrus::Annotator::Message
which can be examined, and on which flags and annotations can be set.
Net::Server,
imapd.conf(5),
RFC3501,
RFC5257.
Greg Banks <
[email protected]>.