[Dovecot] Track when user last checked mail

Jeff A. Earickson jaearick at colby.edu
Wed Apr 27 03:30:53 EEST 2005


Hi,
    I've been lurking on this list for a while.  We are still using
UW-IMAP and Qualcomm popper, but I'm thinking of changing to dovecot
this summer after the students disappear.

In UW-IMAP, I needed this feature so I modified the code to basically
touch a dot file in the user's homedir.  This way I can go look for
this file and check the date to see the last time they used IMAP.
Here is my hack lifted straight out of my patchfile for UW-IMAP;
the same idea could be hacked into dovecot:

+     touchfile = (char *) fs_get (strlen (home) + 15);
+       sprintf(touchfile,"%s/.imapd.last",home);
+       fd = open(touchfile,O_WRONLY|O_CREAT|O_TRUNC,0600);
+       if(fd < 0)
+          syslog (LOG_NOTICE|LOG_AUTH,"touchfile failed for %s:%s",user,strerro
r(errno));
+       else
+          close(fd);
+       fs_give((void **) &touchfile);

Note that fs_get and fs_give are UW's wrapper around malloc() and free().
Build the path to the file, open the file, close the file, complain to
syslog if the open failed.

Jeff Earickson
Colby College
(back to lurking)

On Mon, 25 Apr 2005, Del Stoliker wrote:

> Date: Mon, 25 Apr 2005 17:07:13 -0600
> From: Del Stoliker <dstoliker at alphagraphics.com>
> To: dovecot at dovecot.org
> Subject: RE: [Dovecot] Track when user last checked mail
> 
>>> First off I've just got to say thanks.  We just upgraded from UW to
> Dovecot
>>> migrating from mbox to maildir.  Wow, what a difference!  Load average
> used
>>> to hang around 5.0 during business hours and could get up to 20+ on a bad
>>> day.  Now we rarely break 1.0!
>>>
>>> I'm wondering if there's a way to keep track of the last time a user
>>> checked their email and whether they checked it using POP or IMAP.  We're
>>> trying to gather statistics on what protocols our users use and find
>>> accounts that haven't been checked for a long time.  We used to be able
> to
>>> do some of this with the finger command and the user's mbox.  I found a
>>> script called "mfinger" that works better with Maildir, but it's designed
>>> for Courier.
>
>> You don't say how you wish to access this information, but this works:
>>
>> egrep "(pop|imap)-login: Login:" /var/log/mail.log | grep USERNAME| tail -1
>>
>> Assuming you run it before you rotate your logs, or you could miss out.
>
>> Another way is to modify Dovecot a little and have it record whatever
> activity
>> details you want directly into a Database, ie: SQLite / MySQL. This should
> be
>> simple to do for some inclined developer (if this is a commercial project).
>
>
> Thanks for the suggestions.  I guess I could have articulated my question a
> little better.
>
> Ideally, I'd like to have the user's protocol and timestamp recorded when
> they check mail into a database.  I'd rather not modify dovecot itself -
> seems like that would be a project itself just to maintain.
>
> The only idea I'm coming up with so far is to grep the logfile for each user
> in the manner you suggest on cron job (late at night while the server is
> bored), parse the results, and record them into a database. The downfall is
> that it's not real time.
>
> I can't help but wonder if I'm reinventing the wheel here. Is someone else
> doing something like this?
>



More information about the dovecot mailing list