I will try to do like you said, and i will return later to said the result !
Tks. 2010/6/25 Timo Sirainen <[email protected]> > 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; > } > > >
