Hi,

I’d like to extend the mail_log plugin to log the uid and keywords of a mail 
delivered by LDA. The keywords are set by the sieve plugin.
I added a mail_log_save_finish() function hook listed below. 
However, the uid of the mail is always zero and trying to get the keywords 
results in assertion failure, probably because the message is not committed yet:

Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): dest mail seq: 23, uid: 0
Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): file mail-index-view.c: 
line 217 (_view_lookup_full): assertion failed: (seq > 0 && seq <= 
mail_index_view_get_messages_count(view))
Feb 13 08:07:42 ha-test1 deliver([EMAIL PROTECTED]): Raw backtrace: 
/usr/local/libexec/dovecot/deliver(i_syslog_panic_handler+0x21) [0x80965d9] -> 
/usr/local/libexec/dovecot/deliver [0x8096443] -> 
/usr/local/libexec/dovecot/deliver [0x80821d0] -> 
/usr/local/libexec/dovecot/deliver [0x80827c3] -> 
/usr/local/libexec/dovecot/deliver(mail_index_lookup_keywords+0x32) [0x8082aae] 
-> /usr/local/libexec/dovecot/deliver(index_mail_get_keywords+0x6c) [0x806f038] 
-> /usr/local/lib/dovecot/lda/lib20_mail_log_plugin.so [0xcbdac8] -> 
/usr/local/libexec/dovecot/deliver(mail_storage_copy+0xa8) [0x808a600] -> 
/usr/local/libexec/dovecot/deliver(maildir_copy+0x3e) [0x805e252] -> 
/usr/local/lib/dovecot/lda/lib10_quota_plugin.so [0xfc9741] -> 
/usr/local/lib/dovecot/lda/lib20_mail_log_plugin.so [0xcbd48f] -> 
/usr/local/libexec/dovecot/deliver(deliver_save+0x192) [0x80559ea] -> 
/usr/local/lib/dovecot/lda/lib90_cmusieve_plugin.so [0xaa16bf] ->
 /usr/local/lib/dovecot/lda/lib90_cmusieve_plugin.so [0xaaea0d] -> 
/usr/local/lib/dovecot/lda/lib9

static int mail_log_save_finish(struct mail_save_context *ctx,
               struct mail *dest_mail)
{
    struct mail_log_mailbox *lbox = MAIL_LOG_CONTEXT(ctx->transaction->box);
    int ret;

    ret = lbox->super.save_finish(ctx, dest_mail);
    if (ret < 0) {
        return ret;
    }
    
    if (dest_mail != NULL) {
        const char *const *kw_list;

        i_info("dest mail seq: %u, uid: %u", dest_mail->seq, dest_mail->uid);
        kw_list = mail_get_keywords(dest_mail);
        i_info("dest mail kw: %s", kw_list ? t_strarray_join(kw_list, ",") : 
"NONE");
    }
    return ret;
}

Some mail data, such as flags and headers, can be retrieved OK.
I'm using dovecot-1.0.10 and dovecot-sieve-1.0.2.
Any help in getting the uid and keywords by mail_log plugin will be 
greatly appreciated.

Thanks,
Ron
 





      
____________________________________________________________________________________
Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  
http://tools.search.yahoo.com/newsearch/category.php?category=shopping

Reply via email to