Looking at the get_rfc822_body code in Net::IMAP::Client and the FETCH section in RFC 3501 (pp. 53-57), I think this is part of the IMAP spec: "The \Seen flag is implicitly set; if this causes the flags to change, they SHOULD be included as part of the FETCH responses.".
There is a BODY.PEEK data item for the FETCH command that, unlike BODY (and thus RFC822, which is what this function uses), will avoid setting the flag. The module does not currently appear to support getting message bodies that way, but maybe the author could be persuaded to add that functionality.
| [reply] |
I wrote an email to author sometime back related to some other functionality.
There is no response.
| [reply] |
Ah, hmm, that's unfortunate.
Maybe try again? If the author abandoned the module, though, I have no idea what the best way to proceed would be. Perhaps there is a process for taking over CPAN modules, or some kind of BCP for how to fork them.
Looking at the spec some more, the format of the data returned by FETCH ... RFC822 appears to be equivalent to that returned by FETCH ... BODY[] (p. 78), so a new function that did what you want might be as simple as this (note -- this'd go into Net::IMAP::Client, naturally, not your code):
sub peek_rfc822_body {
my ($self, $msg) = @_;
my $wants_many = undef;
if (ref($msg) eq 'ARRAY') {
$msg = join(',', @$msg);
$wants_many = 1;
}
my ($ok, $lines) = $self->_tell_imap(FETCH => "$msg BODY.PEEK[]",
+1);
if ($ok) {
my @ret = map { $_->[1] } @$lines;
return $wants_many ? \@ret : $ret[0];
}
return undef;
}
But this is totally untested, and as stated above, even if it works, I've no idea what the best way of getting that into the module would be.
| [reply] [d/l] |
It seems there is another way to do that -->
$imap->examine('INBOX');
Using "examine" instead of "select".
The folder is selected in read-only mode. | [reply] [d/l] |