[Dovecot] Marking messages read / retaining date with Sieve
Ben Morrow
ben at morrow.me.uk
Thu Jan 31 03:39:40 EET 2013
At 7PM -0500 on 30/01/13 you (Bret Martin) wrote:
> On Jan 30, 2013, at 6:56 PM, Ben Morrow <ben at morrow.me.uk> wrote:
> > I would do this by scripting IMAP access. Perl's Mail::IMAPClient has
> > explicit support for running dovecot/imap in preauth mode, so you don't
> > even have to authenticate. Of course, you need a Dovecot user account
> > with access to all the relevant messages.
>
> Thanks so much for your help! This sounds like a great option to me.
>
> For "explicit" support, I'm having a lot of trouble finding out how to
> have Mail::IMAPClient invoke /usr/lib/dovecot/imap instead of
> connecting over the network -- could you provide any pointers?
Ack, sorry, I was misremembering: it's Net::IMAP::Simple that has
explicit support (note that the dovecot invocation example in the
perldoc is for dovecot 1.x, for 2.x you just run
$prefix/libexec/dovecot/imap directly).
Mail::IMAPClient (which I usually prefer) will work with a
preauthenticated socket, but you need to create a socketpair explicitly,
fork and exec dovecot/imap with one end of the pair on STDIN/STDOUT,
then pass the other end to Mail::IMAPClient->new as the Socket
parameter. Something like this (I've left out error checking)
use Socket;
socketpair my $DOVE, my $CLIENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC;
unless (fork) {
open STDIN, "<&", $CLIENT;
open STDOUT, ">&", $CLIENT;
exec "/usr/local/libexec/dovecot/imap";
}
close $CLIENT;
my $IMAP = Mail::IMAPClient->new(
Socket => $DOVE,
# other options
);
# don't forget to wait for the imap process when you've finished
Ben
More information about the dovecot
mailing list