[Dovecot] Plugin Handle input messages

Alex Baule alexwbaule at gmail.com
Sat Jun 26 19:08:34 EEST 2010


I will try to do like you said, and i will return later to said the result !


Tks.

2010/6/25 Timo Sirainen <tss at iki.fi>

> On Mon, 2010-06-21 at 16:43 -0300, Alex Baule wrote:
> >     if (imail->data.stream != NULL ||
> >        (_mail->uid == 0 && zuser->save_handler == NULL)) {
> >        return zmail->super.get_stream(_mail, hdr_size, body_size,
> >                           stream_r);
> >    }
> >
> > I think this is the line that return the stream that is the stream sent
> by
> > client.
> >
> > I try to change this line and put inside this IF , a call to my function
> to
> > handle with the input email from client. But i got some errors about the
> > input part.
>
> I'm not really sure what you mean by this. What input are you sending
> where? Show some example non-working code?
>
> > In other email, Timo said, to get the S and W flags in the email name, i
> > need to intercept the email input from client to dovecot, in this part is
> > done the W and S calculation.
> >
> > Timo, where is the part that i can get the input from client ?
>
> IIRC you wanted to add some extra headers to the mail (and you wanted it
> to be visible to clients, right? if not, you could do it similarly than
> how mbox hides some headers). All mails are saved via:
>
> int mailbox_save_begin(struct mail_save_context **ctx, struct istream
> *input);
>
> And the input comes from there. You need to replace that input with your
> own input stream that contains the wanted headers and other changes
> (probably something built with istream-concat and
> istream-header-filter). You can replace the input by overriding
> mailbox.save_begin() method, for example see acl plugin how it uses
> acl_save_begin(). Maybe something like:
>
> static int
> your_save_begin(struct mail_save_context *ctx, struct istream *input)
> {
>        struct mailbox *box = ctx->transaction->box;
>        struct your_mailbox *abox = YOUR_CONTEXT(box);
>        struct istream *new_input;
>        int ret;
>
>        new_input = build_changed_input(input);
>        ret = abox->module_ctx.super.save_begin(ctx, new_input);
>        i_stream_unref(&new_input);
>        return ret;
> }
>
>
>


More information about the dovecot mailing list