Scroll to navigation

Message(3pm) User Contributed Perl Documentation Message(3pm)


Cyrus::Annotator::Message - representation of a message to annotate


  use warnings;
  use strict;
  package MyAnnotatorDaemon;
  use base Cyrus::Annotator::Daemon;
  sub annotate_message
      my ($message) = @_;
      $message->set_shared_annotation('/comment', 'Hello!!');


This module encapsulates a message which is being processed by the annotator daemon.


Cyrus::Annotator::Message has the following methods.

Takes the following args:

 # required
 * BODYSTRUCTURE => parsed bodystructure
 # optional (but you need to provide SOMETHING if your code uses any
 # of the accessors)
 * GUID => 40 character sha1
 * HEADER => Mail::Header object with headers pre-parsed
 * FILENAME => path to rfc822 file
 # totally optional (will be considered empty if not set)
 * FLAGS => array of already set flags
 * ANNOTATIONS => array of already set annotations
returns a read-only filehandle to the raw (rfc822) representation of the full message.
Given some content, decode it from the part's content encoding and charset.
returns the first n bytes of the bodypart passed. This is a section of the bodystructure (hashref). If no part is passed, it's the raw message.

If no 'nbytes' is passed, read the entire part.

returns a Mail::Header object containing all the headers of the message.
returns a structure

is a structure closely based on the IMAP BODYSTRUCTURE, decoded into a hash, including recursively all MIME sections. In general, the following items are defined for all body structures:

  • MIME-Type
  • MIME-Subtype
  • Content-Type
  • Content-Description
  • Content-Disposition
  • Content-Language

Body structures which have a MIME-Type of 'multipart' contain the following items:


For body structures except those that have a MIME-Type of 'multipart', the following are defined:

  • Content-ID
  • Content-Description
  • Content-Transfer-Encoding
  • Content-MD5
  • Size
  • Lines
  • Offset
  • HeaderSize
returns the hex encoded (40 character) sha1 of the rfc822 representation.
Check for the boolean value of a flag with $name, set the flag and remove the flag respectively.

Note that changes are not immediate. They will be applied by the annotator at the end.

For example:

Get, set and clear the value of an annotation, either shared or private. The "get" accessors return a string with the value. Clear is the same as set with $value of the empty string ('').

For example:

  $message->set_shared_annotation('/comment', 'Hello World');
returns two arrayrefs - [['flagname', 'bool']] and [['entry', 'type', 'value']], e.g.

[["\\Flagged", 1]], [['/comment', 'value.shared', 'Hello World']]


RFC3501, RFC5257.


Greg Banks <>. Bron Gondwana <>.

2022-05-05 perl v5.34.0