Chris Haumesser wrote:
> Rudimentary dbmail classes for python? Are they online somewhere?
In the source dbmail-2.2.x/python/...
I should rewrite them to use sqlalchemy, really. Provide a working model...
from another project, playing with Pylons:
#!/usr/bin/python
from sqlalchemy import *
from sqlalchemy.ext.assignmapper import assign_mapper
class User(object):
content = None
def __str__(self):
return self.userid
class Folder(object):
content = None
def __str__(self):
return self.name
class Message(object):
content = None
def __str__(self):
return self.message_idnr
class Physmessage(object):
content = None
class Messageblk(object):
content = None
class Envelope(object):
content = None
meta = BoundMetaData('sqlite:////home/paul/dbmail.db')
print 'opened database'
users = Table('dbmail_users', meta, autoload=True)
folders = Table('dbmail_mailboxes', meta, autoload=True)
messages = Table('dbmail_messages', meta, autoload=True)
physmessages = Table('dbmail_physmessage', meta, autoload=True)
messageblks = Table('dbmail_messageblks', meta, autoload=True)
envelopes = Table('dbmail_envelope', meta, autoload=True)
user_mapper = assign_mapper(session_context, User, users)
folder_mapper = assign_mapper(session_context, Folder, folders)
message_mapper = assign_mapper(session_context, Message, messages)
physmessage_mapper = assign_mapper(session_context, Physmessage,
physmessages)
messageblk_mapper = assign_mapper(session_context, Messageblk, messageblks)
envelope_mapper = assign_mapper(session_context, Envelope, envelopes)
>
> Yes, I mean to move messages into folders en masse. For instance, say I
> want to keep folders Inbox, Archive, TwoYearsOld, ThreeYearsOld, etc. I
> want to run a daily cron job that does the following, based on the
> mail's date header:
>
> * Move all unflagged messages older than 30 days from Inbox to Archive
in pseudo code:
set owner_idnr=(select user_idnr from dbmail_users where userid =
'myname' );
set old_mbox=(select mailbox_idnr from dbmail_mailboxes
where name = 'INBOX' and owner_idnr = @owner_idnr);
set new_mbox=(select mailbox_idnr from dbmail_mailboxes
where name = 'Archive' and owner_idnr = @owner_idnr);
update dbmail_messages
set mailbox_idnr = @new_mbox
where [EMAIL PROTECTED]
and message_idnr in (
select message_idnr from dbmail_messages m
join dbmail_physmessage p on p.id=m.physmessage_id
where p.internal_date < now() - interval 30 day
and flagged_flag = 0
);
> * Move all messages older than 365 days from Archive to TwoYearsOld
> * Move all messages older than 730 days from TwoYearsOld to
> ThreeYearsOld
> * . . . (creating folders as needed along the way)
>
> That's just one example. But the abstract idea is the same... I'm
> looking for scripting tools to select X messages and do Y to them (move,
> delete, flag, unflag, etc). Perhaps some simple things can be done in
> raw SQL.
sql is not a good scripting language, especially if you want to be
compatible with the different engines. Sqlalchemy would be my tool of
choice.
>
> Regarding vfolders...
>> But you would also require some middleware for managing those views. [...]
>> If not, we'd have to
>> design our own imap extension 'VFOLDER'.
>>
>
> That would be ideal, I suppose... but I would settle for server-side
> management. Some command-line tool, or even raw SQL script, could
> configure a virtual folder that an IMAP client would see as any other
> folder. E.g., create a mailbox and populate it with the results of an
> arbitrary SQL query. Maybe allow for a sieve-style configuration file
> to define vfolders for a given user. IMAP doesn't have to know a thing,
> does it? ;-)
But neither does sieve. And sieve is a message parsing filter language.
--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
DBmail mailing list
[email protected]
https://mailman.fastxs.nl/mailman/listinfo/dbmail