Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: DBMail: users

Who starts this search?

 

 

DBMail users RSS feed   Index | Next | Previous | View Threaded


michael.monnerie at is

Jan 17, 2009, 10:07 AM

Post #1 of 12 (925 views)
Permalink
Who starts this search?

Paul, I'm now running dbmail 2.2 internally. I have my kmail open, and
want to browse between folders and read my messages. That was horribly
slow, so I looked what's up and found this query running:

SELECT message_idnr FROM dbmail_messages m JOIN dbmail_physmessage p ON
m.physmessage_id=p.id JOIN dbmail_headervalue v on v.physmessage_id=p.id
WHERE mailbox_idnr = 3236 AND status IN (0,1) AND
SUBSTRING(headervalue,0,255) ILIKE '%kwf%' ORDER BY message_idnr;

Looks like kmail runs a query, searching for "%kwf%" somewhere in a
header from all messages in a mailbox. Any ideas why? It wasn't me *-)
Could kwf have a special meaning?

EXPLAIN ANALYZE:
QUERY
PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=281008.95..281009.22 rows=109 width=8) (actual
time=92589.164..92589.166 rows=2 loops=1)
Sort Key: m.message_idnr
Sort Method: quicksort Memory: 25kB
-> Nested Loop (cost=297.16..281005.26 rows=109 width=8) (actual
time=52791.256..92586.765 rows=2 loops=1)
-> Hash Join (cost=297.16..280143.98 rows=109 width=24)
(actual time=52780.774..92576.224 rows=2 loops=1)
Hash Cond: (v.physmessage_id = m.physmessage_id)
-> Seq Scan on dbmail_headervalue v
(cost=0.00..279773.17 rows=4837 width=8) (actual time=96.491..92524.032
rows=180 loops=1)
Filter: ("substring"(headervalue, 0, 255) ~~*
'%kwf%'::text)
-> Hash (cost=232.28..232.28 rows=5191 width=16)
(actual time=51.200..51.200 rows=5180 loops=1)
-> Index Scan using dbmail_messages_1 on
dbmail_messages m (cost=0.00..232.28 rows=5191 width=16) (actual
time=21.516..42.687 rows=5180 loops=1)
Index Cond: (mailbox_idnr = 3236)
Filter: (status = ANY ('{0,1}'::integer[]))
-> Index Scan using dbmail_physmessage_pkey on
dbmail_physmessage p (cost=0.00..7.89 rows=1 width=8) (actual
time=5.254..5.257 rows=1 loops=2)
Index Cond: (p.id = m.physmessage_id)
Total runtime: 92600.940 ms
(15 Zeilen)



mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


paul at nfg

Jan 18, 2009, 2:08 AM

Post #2 of 12 (875 views)
Permalink
Re: Who starts this search? [In reply to]

Michael,

This is the result of a IMAP SEARCH command like:

00A UID SEARCH 1:* HEADER kwf

The only relevant results for kwf are related to Kerio WinRoute Firewall.



Michael Monnerie wrote:
> Paul, I'm now running dbmail 2.2 internally. I have my kmail open, and
> want to browse between folders and read my messages. That was horribly
> slow, so I looked what's up and found this query running:
>
> SELECT message_idnr FROM dbmail_messages m JOIN dbmail_physmessage p ON
> m.physmessage_id=p.id JOIN dbmail_headervalue v on v.physmessage_id=p.id
> WHERE mailbox_idnr = 3236 AND status IN (0,1) AND
> SUBSTRING(headervalue,0,255) ILIKE '%kwf%' ORDER BY message_idnr;
>
> Looks like kmail runs a query, searching for "%kwf%" somewhere in a
> header from all messages in a mailbox. Any ideas why? It wasn't me *-)
> Could kwf have a special meaning?
>
> EXPLAIN ANALYZE:
> QUERY
> PLAN
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> Sort (cost=281008.95..281009.22 rows=109 width=8) (actual
> time=92589.164..92589.166 rows=2 loops=1)
> Sort Key: m.message_idnr
> Sort Method: quicksort Memory: 25kB
> -> Nested Loop (cost=297.16..281005.26 rows=109 width=8) (actual
> time=52791.256..92586.765 rows=2 loops=1)
> -> Hash Join (cost=297.16..280143.98 rows=109 width=24)
> (actual time=52780.774..92576.224 rows=2 loops=1)
> Hash Cond: (v.physmessage_id = m.physmessage_id)
> -> Seq Scan on dbmail_headervalue v
> (cost=0.00..279773.17 rows=4837 width=8) (actual time=96.491..92524.032
> rows=180 loops=1)
> Filter: ("substring"(headervalue, 0, 255) ~~*
> '%kwf%'::text)
> -> Hash (cost=232.28..232.28 rows=5191 width=16)
> (actual time=51.200..51.200 rows=5180 loops=1)
> -> Index Scan using dbmail_messages_1 on
> dbmail_messages m (cost=0.00..232.28 rows=5191 width=16) (actual
> time=21.516..42.687 rows=5180 loops=1)
> Index Cond: (mailbox_idnr = 3236)
> Filter: (status = ANY ('{0,1}'::integer[]))
> -> Index Scan using dbmail_physmessage_pkey on
> dbmail_physmessage p (cost=0.00..7.89 rows=1 width=8) (actual
> time=5.254..5.257 rows=1 loops=2)
> Index Cond: (p.id = m.physmessage_id)
> Total runtime: 92600.940 ms
> (15 Zeilen)
>
>
>
> mfg zmi


--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 18, 2009, 11:46 PM

Post #3 of 12 (875 views)
Permalink
Re: Who starts this search? [In reply to]

On Sonntag 18 Januar 2009 Paul J Stevens wrote:
> This is the result of a IMAP SEARCH command like:
> 00A UID SEARCH 1:* HEADER kwf
> The only relevant results for kwf are related to Kerio WinRoute
> Firewall.

I found it's done by kmail. On every folder change, as well as about
every 5th-6th message kmail does
11798 UID SEARCH TEXT "kwf" UID 3613866

That's of course horribly slow. It searches the current folder, all
headervalues containing %kwf%.
dbmail_messages count = 233936
dbmail_headervalue count = 8530030

No idea why this search is done suddenly. But that again shows that the
enormous headervalue table size is a real problem. I really believe that
should be compressed, storing values only once, just like you do in 2.3
with the messageparts. Example:

select count(1) from dbmail_headervalue where headervalue = '';
count
--------
319292

and there are lots of other duplicates as well. Compression would be
good, as you can see a single user can occupy dbmail, making sharing
nearly impossible (this search takes 60-90s, using 100% CPU on a single
core).

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


paul at nfg

Jan 18, 2009, 11:56 PM

Post #4 of 12 (876 views)
Permalink
Re: Who starts this search? [In reply to]

Michael Monnerie wrote:
> On Sonntag 18 Januar 2009 Paul J Stevens wrote:
>> This is the result of a IMAP SEARCH command like:
>> 00A UID SEARCH 1:* HEADER kwf
>> The only relevant results for kwf are related to Kerio WinRoute
>> Firewall.
>
> I found it's done by kmail. On every folder change, as well as about
> every 5th-6th message kmail does
> 11798 UID SEARCH TEXT "kwf" UID 3613866
>
> That's of course horribly slow. It searches the current folder, all
> headervalues containing %kwf%.
> dbmail_messages count = 233936
> dbmail_headervalue count = 8530030

That's because currently for search each search term is search for
separately, after which the search results are merged. In this
particular case the search should be optimized to join the message idnr
as well (UID xxx) which would drastically reduce the table scan.
I've done a stable at improving search speeds once, but getting the
possibly recursive search terms translated into a correct query is not a
trivial thing.

>
> No idea why this search is done suddenly. But that again shows that the
> enormous headervalue table size is a real problem. I really believe that
> should be compressed, storing values only once, just like you do in 2.3
> with the messageparts. Example:
>
> select count(1) from dbmail_headervalue where headervalue = '';
> count
> --------
> 319292

You may want to:

delete from dbmail_headervalue where headervalue = '';
delete from dbmail_headername where headername='Received' or headername
like 'X-';

etc. Of course this will make search results possibly incomplete, but
otherwise you're free to cleanup a little.

> and there are lots of other duplicates as well. Compression would be
> good, as you can see a single user can occupy dbmail, making sharing
> nearly impossible (this search takes 60-90s, using 100% CPU on a single
> core).

Compressing the headername/headervalue tables would be nice. But I don't
have the resources to do such a thing at this time.

--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


bbaptist at iexposure

Jan 19, 2009, 6:38 AM

Post #5 of 12 (874 views)
Permalink
Re: Who starts this search? [In reply to]

On Monday 19 January 2009 01:46:29 am Michael Monnerie wrote:

> I found it's done by kmail. On every folder change, as well as about
> every 5th-6th message kmail does
> 11798 UID SEARCH TEXT "kwf" UID 3613866
>

You have a past search that is being searched over and over again, it will
show up under your "Searches" virtual folder. You have to clear your searches
virtual folder.


--
Bret Baptist
Senior Network Administrator
bbaptist[at]iexposure.com
Internet Exposure, Inc.
http://www.iexposure.com
(612) 676-1946 x17

Providing Internet Services since 1995
Web Development ~ Search Engine Marketing ~ Web Analytics
Network Security ~ On Demand Tech Support ~ E-Mail Marketing
_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 19, 2009, 6:51 AM

Post #6 of 12 (872 views)
Permalink
Re: Improving headervalues table, was: Who starts this search? [In reply to]

On Montag 19 Januar 2009 Paul J Stevens wrote:
> That's because currently for search each search term is search for
> separately, after which the search results are merged. In this
> particular case the search should be optimized to join the message
> idnr as well (UID xxx) which would drastically reduce the table scan.

Yes, especially if there are several thousand messages in a box.

> I've done a stable at improving search speeds once, but getting the
> possibly recursive search terms translated into a correct query is
> not a trivial thing.

What can be recursive?
And wouldn't it be better to throw all search terms at the DB and it
should say what it finds? That's what we have SQL for.

> You may want to:
> delete from dbmail_headervalue where headervalue = '';

Yes, as a workaround. But doesn't "dbmail-util -ay" recreate those
headers?

> Compressing the headername/headervalue tables would be nice. But I
> don't have the resources to do such a thing at this time.

Maybe we could find help for this problem? I'll try to do the SQL part:

We currently have physmessage -> headervalue -> headername

If we split it up, we can do
physmessage -> headernamevalue -> headername+headervalue

CREATE TABLE headernamevalue (
id INT8 NOT NULL
REFERENCES dbmail_physmessage(id)
ON UPDATE CASCADE ON DELETE CASCADE,
nameid INT8 NOT NULL
REFERENCES dbmail_headername(nameid)
ON UPDATE CASCADE ON DELETE RESTRICT,
value id INT8 NOT NULL
REFERENCES dbmail_headervalue(valueid)
ON UPDATE CASCADE ON DELETE RESTRICT,
PRIMARY KEY (id,name,value)
);

CREATE SEQUENCE dbmail_headernameid_seq;
CREATE TABLE dbmail_headername (
nameid INT8 NOT NULL DEFAULT nextval('dbmail_headernameid_seq'),
name VARCHAR(100) NOT NULL DEFAULT 'BROKEN_HEADER',
PRIMARY KEY (nameid)
);
CREATE UNIQUE INDEX dbmail_headername_1 on dbmail_headername(name);

CREATE SEQUENCE dbmail_headervalueid_seq;
CREATE TABLE dbmail_headervalue (
valueid INT8 NOT NULL DEFAULT nextval('dbmail_headervalueid_seq'),
value TEXT NOT NULL DEFAULT '',
PRIMARY KEY (valueid)
);
CREATE UNIQUE INDEX dbmail_headervalue_1 ON dbmail_headervalue(value);

With that construct, a value or name only needs to be inserted once, and
only it's reference is stored into headernamevalue. Shouldn't be a lot
of work, but would save a lot of storage, and improve search speed
tremendously.

Currently there is substring(dbmail_headervalue(value),0,255) on the
dbmail_headername_1 index, but I believe this could be dropped and all
accesses with "substring" removed. I think it was only done because of a
bug somewhere, or and index that could not be created?

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


paul at nfg

Jan 19, 2009, 1:05 PM

Post #7 of 12 (871 views)
Permalink
Re: Improving headervalues table, was: Who starts this search? [In reply to]

Michael Monnerie wrote:
> What can be recursive?

imap search-keys

http://tools.ietf.org/html/rfc3501

search-key = "ALL" / "ANSWERED" / "BCC" SP astring /
"BEFORE" SP date / "BODY" SP astring /
"CC" SP astring / "DELETED" / "FLAGGED" /
"FROM" SP astring / "KEYWORD" SP flag-keyword /
"NEW" / "OLD" / "ON" SP date / "RECENT" / "SEEN" /
"SINCE" SP date / "SUBJECT" SP astring /
"TEXT" SP astring / "TO" SP astring /
"UNANSWERED" / "UNDELETED" / "UNFLAGGED" /
"UNKEYWORD" SP flag-keyword / "UNSEEN" /
; Above this line were in [IMAP2]
"DRAFT" / "HEADER" SP header-fld-name SP astring /
"LARGER" SP number / "NOT" SP search-key /
"OR" SP search-key SP search-key /
"SENTBEFORE" SP date / "SENTON" SP date /
"SENTSINCE" SP date / "SMALLER" SP number /
"UID" SP sequence-set / "UNDRAFT" / sequence-set /
"(" search-key *(SP search-key) ")"


so (using just the sequence-set search key) stuff like this needs to be
supported:

x SEARCH 1:* or (1) ((3:4) or (6:8)) not (4:6)

> And wouldn't it be better to throw all search terms at the DB and it
> should say what it finds? That's what we have SQL for.

Possibly, maybe even likely. Until your search-key becomes too complex
and the query will explode. Still, using the dbms query optimizer should
improve the situation.

>
>> You may want to:
>> delete from dbmail_headervalue where headervalue = '';
>
> Yes, as a workaround. But doesn't "dbmail-util -ay" recreate those
> headers?

Never. New messages arriving will recreate missing headervalues, but
dbmail-util is only meant to convert old-style storage (dbmail<2.0). Not
validate the caches for all messages in the store. That would be insane.
I have played with the idea of enabling an enforced policy wrt
headercache: just cache headervalues for headernames in the
dbmail_headername table. What headernames would be eligible for caching
could also be configurable through dbmail.conf, maybe. But there are
some significant downsides to that approach, also. When in doubt, do
nothing.

>
>> Compressing the headername/headervalue tables would be nice. But I
>> don't have the resources to do such a thing at this time.
>
> Maybe we could find help for this problem? I'll try to do the SQL part:

Ok.

> With that construct, a value or name only needs to be inserted once, and
> only it's reference is stored into headernamevalue. Shouldn't be a lot
> of work, but would save a lot of storage, and improve search speed
> tremendously.

Agreed. Maybe something for the wiki then, and file a wishlist bug.
Maybe someone with c-coding skill will rise to the challenge.

>
> Currently there is substring(dbmail_headervalue(value),0,255) on the
> dbmail_headername_1 index, but I believe this could be dropped and all
> accesses with "substring" removed. I think it was only done because of a
> bug somewhere, or and index that could not be created?

Iirc, you can't/couldn't creat indexes on blobs without specifying the
width of the index. Has that changed (reference plz)?


--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


paul at nfg

Jan 19, 2009, 1:07 PM

Post #8 of 12 (872 views)
Permalink
Re: Who starts this search? [In reply to]

Bret Baptist wrote:
> On Monday 19 January 2009 01:46:29 am Michael Monnerie wrote:
>
>> I found it's done by kmail. On every folder change, as well as about
>> every 5th-6th message kmail does
>> 11798 UID SEARCH TEXT "kwf" UID 3613866
>>
>
> You have a past search that is being searched over and over again, it will
> show up under your "Searches" virtual folder. You have to clear your searches
> virtual folder.

Nice catch. Virtual folders on dbmail suck because basically search
still sucks, grrrr.


--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 19, 2009, 10:53 PM

Post #9 of 12 (870 views)
Permalink
Re: Who starts this search? [In reply to]

On Sonntag 18 Januar 2009 Paul J Stevens wrote:
> This is the result of a IMAP SEARCH command like:
> 00A UID SEARCH 1:* HEADER kwf

Paul, with your help I could file a bug report on kde/kmail:
http://bugs.kde.org/show_bug.cgi?id=181370

That one was very nasty. I wonder why it didn't show on Cyrus, at least
I didn't have that huge performance impact, it was only a little slow on
folder change sometimes.

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 19, 2009, 11:32 PM

Post #10 of 12 (869 views)
Permalink
Re: Improving headervalues table, was: Who starts this search? [In reply to]

On Montag 19 Januar 2009 Paul J Stevens wrote:
> so (using just the sequence-set search key) stuff like this needs to
> be supported:
>
> x SEARCH 1:* or (1) ((3:4) or (6:8)) not (4:6)
>
> > And wouldn't it be better to throw all search terms at the DB and
> > it should say what it finds? That's what we have SQL for.
>
> Possibly, maybe even likely. Until your search-key becomes too
> complex and the query will explode. Still, using the dbms query
> optimizer should improve the situation.

At least it's in the responsibility of the user to make his search
complex or not. Who does such a search? In kmail I can only search for 2
values at once. Maybe other mailers allow more, but still, I could also
do a "search all folders for mails containing a". In the query I had,
there was the UID (which is message_idnr I guess), and if it had been
included the performance wouldn't have nearly stopped in dbmail.

> > Yes, as a workaround. But doesn't "dbmail-util -ay" recreate those
> > headers?
>
> Never.

Good. I removed all the "Received:" cached headervalues, which made up
2.7 million entries.

> > With that construct, a value or name only needs to be inserted
> > once, and only it's reference is stored into headernamevalue.
> > Shouldn't be a lot of work, but would save a lot of storage, and
> > improve search speed tremendously.
>
> Agreed. Maybe something for the wiki then, and file a wishlist bug.
> Maybe someone with c-coding skill will rise to the challenge.

Wiki:
http://www.dbmail.org/dokuwiki/doku.php?id=compress_headervalue_table
Wishlist Bug:
http://www.dbmail.org/mantis/view.php?id=754

> > Currently there is substring(dbmail_headervalue(value),0,255) on
> > the dbmail_headername_1 index, but I believe this could be dropped
> > and all accesses with "substring" removed. I think it was only done
> > because of a bug somewhere, or and index that could not be created?
>
> Iirc, you can't/couldn't creat indexes on blobs without specifying
> the width of the index. Has that changed (reference plz)?

I just tried this on PostgreSQL 8.3:
# CREATE INDEX dbmail_headervalue_4 ON dbmail_headervalue (headervalue);
ERROR: index row requires 18720 bytes, maximum size is 8191
8k is the default page size of PostgreSQL. And I don't know for the
other RDBMs, so staying at 255 is just OK ;-)

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 19, 2009, 11:33 PM

Post #11 of 12 (871 views)
Permalink
Re: Who starts this search? [In reply to]

On Montag 19 Januar 2009 Bret Baptist wrote:
> You have a past search that is being searched over and over again, it
> will show up under your "Searches" virtual folder.  You have to clear
> your searches virtual folder.

Thanks Bret, just discovered the bug and had a bug report filed on
kmail. Stupidly the search gets started on every single folder search.

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail


michael.monnerie at is

Jan 21, 2009, 1:40 AM

Post #12 of 12 (854 views)
Permalink
Re: Who starts this search? [In reply to]

On Dienstag 20 Januar 2009 Michael Monnerie wrote:
> Stupidly the search gets started on every single folder search.

That should have been "Stupidly the search gets started on every single
folder change" of course.

mfg zmi
--
// Michael Monnerie, Ing.BSc ----- http://it-management.at
// Tel: 0660 / 415 65 31 .network.your.ideas.
// PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import"
// Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4
// Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4

_______________________________________________
DBmail mailing list
DBmail[at]dbmail.org
https://mailman.fastxs.nl/mailman/listinfo/dbmail

DBMail users RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.