GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Net::IMAP::SimpleX(3) User Contributed Perl Documentation Net::IMAP::SimpleX(3)

Net::IMAP::SimpleX - Addons for Net::IMAP::Simple

    use strict;
    use warnings;
    use Net::IMAP::SimpleX;

Net::IMAP::SimpleX uses Net::IMAP::Simple as a base so the object creation is the same as it is for the ancestor:

    my $imap = Net::IMAP::SimpleX->new('imap.example.com') ||
       die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n";

    $imap->select("INBOX");

Net::IMAP::SimpleX is a collection of handy methods that are not simple, require Parse::RecDescent, or are experimental.

This module adds some useful, yet not so simple, extensions on top of Net::IMAP::Simple.

new
For details on the invocation, read Net::IMAP::Simple.
body_summary
Typical invocations will take this overall shape.

    # get an object representation of the message body
    my $summary = $imap->body_summary($message_number);

    # multipart message
    if ($summary->has_parts) {
        for my $subpart ($summary->parts) {
            if ($subpart->has_parts) { ... }
            # examine the message part
            my @attr = map { $subpart->$_ } qw/content_type encoding encoded_size/;
            # fetch the raw message part
            my $subpart_body = $imap->get($message_number, $subpart->part_number);
        }
    } else {
        my $body = $summary->body;
        my @attr = map { $body->$_ } qw/content_type encoding encoded_size/
    }
    

This method returns a simple object that contains a representation of the body of a message. The object is built by a Parse::RecDescent parser using the output of an IMAP fetch body command. The parser uses the formal syntax as defined by RFC3501 <http://tools.ietf.org/html/rfc3501#section-9>.

    my $body = $summary->body;
    my @attr = map { $body->$_ } qw/
        content_description
        encoded_size
        charset
        content_type
        part_number
        format
        id
        encoding
    /;
    

For multipart messages, the object contains sub-objects for each message part, accessible via the parts() method and inspected via the has_parts() method. The type method describes the type of multipart (such as mixed or alternative). The parts method returns a list of sub parts, which themselves may have subparts, and so on.

An example of a multipart, alternative message with a text body and an html version of the body would looke something like:

    if ($summary->has_parts) {
        if ($summary->type eq 'alternative') {
            my ($html) = grep { $_->content_type eq 'text/html' } $summary->parts;
        }
    }
    

A really complex, multipart message could look something like this:

    if ($summary->has_parts && $summary->type eq 'mixed') {

        for my $part ($summary->parts) {
            if ($part->has_parts && $part->type eq 'mixed') { ... }
            ...
        }

    }
    
fetch
The fetch command returns the various parts of messages that users request. It is fairly complicated (following RFC3501 using a grammar/parser), but there are some basic patterns that it follows.

    my $res  =$imap->fetch('30:32' => 'UID BODY.PEEK[HEADER.FIELDS (DATE)] FLAGS')
    # $res = {
    #   30 => {
    #           "BODY[HEADER.FIELDS (DATE)]" => "Date: Sun, 18 Jul 2010 20:54:48 -0400\r\n\r\n",
    #           "FLAGS" => ["\\Flagged", "\\Seen"],
    #           "UID" => 58890,
    #         },
    #   31 => {
    #           "BODY[HEADER.FIELDS (DATE)]" => "Date: Wed, 21 Jul 2010 09:09:04 -0400\r\n\r\n",
    #           "FLAGS" => ["\\Seen"],
    #           "UID" => 58891,
    #         },
    #   32 => {
    #           "BODY[HEADER.FIELDS (DATE)]" => "Date: Sat, 24 Jul 2010 05:12:06 -0700\r\n\r\n",
    #           "FLAGS" => ["\\Seen"],
    #           "UID" => 58892,
    #         },
    # }
    

So-called "parenthized" lists will be returned as an array (see "FLAGS") but nearly everything else will come back as strings. This includes parenthized queries. Take "BODY.PEAK[HEADER.FIELDS (DATE FROM SUBJECT)]"), for example. The result would come back as the RFC822 header lines (as the above "Date: Sun, ..." has done).

For more information about the different types of queries, see RFC3501. There's a surprising number of things that can be queried.

uidfetch
This is roughly the same thing as the "fetch()" method above, but the query runs on UIDs instead of sequence numbers. The keys of the $res are still the sequence numbers though.

    my $res  =$imap->fetch('58890' => 'UID BODY.PEEK[HEADER.FIELDS (DATE)] FLAGS')
    # $res = {
    #   30 => {
    #           "BODY[HEADER.FIELDS (DATE)]" => "Date: Sun, 18 Jul 2010 20:54:48 -0400\r\n\r\n",
    #           "FLAGS" => ["\\Flagged", "\\Seen"],
    #           "UID" => 58890,
    #         },
    #   ...
    

INITIAL AUTHOR
Jason Woodward "<woodwardj@jaos.org>"
ADDITIONAL CONTRIBUTIONS
Paul Miller "<jettero@cpan.org>" [fetch()]

Copyright (c) 2010 Jason Woodward

All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0.

This program is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.

<https://rt.cpan.org/Dist/Display.html?Queue=Net-IMAP-Simple>

perl, Net::IMAP::Simple, Parse::RecDescent
2017-06-11 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.