[notmuch] notmuch vs gmail filters
[notmuch-archives.git] / 48 / fbd633a2d7582a809f50a3168d2a38fc82160f
1 Return-Path: <anthony.j.towns@gmail.com>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 49BAB4196F0\r
6         for <notmuch@notmuchmail.org>; Thu,  1 Apr 2010 01:01:18 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: 0.801\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=0.801 tagged_above=-999 required=5\r
12         tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,\r
13         FREEMAIL_FROM=0.001] autolearn=ham\r
14 Received: from olra.theworths.org ([127.0.0.1])\r
15         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
16         with ESMTP id mB4VH5nbUlvb for <notmuch@notmuchmail.org>;\r
17         Thu,  1 Apr 2010 01:01:17 -0700 (PDT)\r
18 Received: from mail-gy0-f181.google.com (mail-gy0-f181.google.com\r
19         [209.85.160.181])\r
20         by olra.theworths.org (Postfix) with ESMTP id 40D24431FC1\r
21         for <notmuch@notmuchmail.org>; Thu,  1 Apr 2010 01:01:17 -0700 (PDT)\r
22 Received: by gyg8 with SMTP id 8so324354gyg.26\r
23         for <notmuch@notmuchmail.org>; Thu, 01 Apr 2010 01:01:16 -0700 (PDT)\r
24 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;\r
25         h=domainkey-signature:mime-version:sender:received:date\r
26         :x-google-sender-auth:received:message-id:subject:from:to\r
27         :content-type; bh=XdYNNm71eBHiJAbnxngWRb57VopaER5kkDYNTUvZi9w=;\r
28         b=rOjZfFj/mZCL1pjzxLJ6NOUT1O+vxYXOGMKcekoT2E4irvzJbs/bXvRDx7rk84ozkz\r
29         ICxGDsuF8T4KsqNHC3PpX49nOUrzAv5HMftFbfxUh0m9xA5kjtKBJlGkghrsOQyYs8jH\r
30         62HMmrAPinE05RaV3UvLg0uVIpsiYRsWukUUM=\r
31 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;\r
32         h=mime-version:sender:date:x-google-sender-auth:message-id:subject\r
33         :from:to:content-type;\r
34         b=ERE/7GLG72oxNv774ta4srDNfV/hDILhekT71whsnJd3Ledxv7IjLvqrvnSgigGzPS\r
35         X5WRM5LHbP/7zW2wae61R4HVqbKGoSEtKFev78lBYIfMienPVzyGtvaQNGDunZbOUtlb\r
36         UPMSFJESyUqugWxkvDUTysb9DT0AUCilPuIh8=\r
37 MIME-Version: 1.0\r
38 Sender: anthony.j.towns@gmail.com\r
39 Received: by 10.90.32.14 with HTTP; Thu, 1 Apr 2010 01:01:16 -0700 (PDT)\r
40 Date: Thu, 1 Apr 2010 18:01:16 +1000\r
41 X-Google-Sender-Auth: 42ed67876eae44a5\r
42 Received: by 10.91.55.25 with SMTP id h25mr1522371agk.61.1270108876405; Thu, \r
43         01 Apr 2010 01:01:16 -0700 (PDT)\r
44 Message-ID: <i2w87b3a4191004010101gfe3ec39ez5243d60e3edf3fc8@mail.gmail.com>\r
45 From: Anthony Towns <aj@erisian.com.au>\r
46 To: notmuch@notmuchmail.org\r
47 Content-Type: multipart/mixed; boundary=0016e641dace67919304832844ba\r
48 Subject: [notmuch] notmuch vs gmail filters\r
49 X-BeenThere: notmuch@notmuchmail.org\r
50 X-Mailman-Version: 2.1.13\r
51 Precedence: list\r
52 List-Id: "Use and development of the notmuch mail system."\r
53         <notmuch.notmuchmail.org>\r
54 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
55         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
56 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
57 List-Post: <mailto:notmuch@notmuchmail.org>\r
58 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
59 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
60         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
61 X-List-Received-Date: Thu, 01 Apr 2010 08:01:18 -0000\r
62 \r
63 --0016e641dace67919304832844ba\r
64 Content-Type: text/plain; charset=ISO-8859-1\r
65 \r
66 Hey *,\r
67 \r
68 I'm currently using gmail for my mail and trying to port its behaviour\r
69 to notmuch. I had a go at writing a python script to convert my gmails\r
70 to notmuch tag commands along the lines of Carl's post [0]. It uses\r
71 the Gmail labs feature to export filters (to an XML file), and then\r
72 goes from XML stanzas like:\r
73 \r
74         <entry>\r
75                 <category term='filter'></category>\r
76                 <title>Mail Filter</title>\r
77                 <id>tag:mail.google.com,2008:filter:1270085835242</id>\r
78                 <updated>2010-04-01T05:33:40Z</updated>\r
79                 <content></content>\r
80                 <apps:property name='from' value='updates@linkedin.com'/>\r
81                 <apps:property name='label' value='flyers'/>\r
82                 <apps:property name='shouldArchive' value='true'/>\r
83         </entry>\r
84 \r
85 (which says to tag messages from updates@linked.com with "flyers" and\r
86 skip the inbox) into a notmuch command like:\r
87 \r
88     notmuch tag -inbox +flyers -- from:updates@linkedin.com '(' not\r
89 tag:flyers or tag:inbox ')'\r
90 \r
91 The bit in brackets makes sure it doesn't tag messages that already\r
92 have exactly the right tags -- this coule probably be implied in any\r
93 invocation of notmuch tag really...\r
94 \r
95 Anyway, attached. It converts gmail's list: match to a notmuch to:\r
96 match, and just gives up on deliveredto: matches. But maybe someone\r
97 else finds it useful/interesting too :)\r
98 \r
99 Cheers,\r
100 aj\r
101 \r
102 [0] id:87r5o8stbj.fsf@yoom.home.cworth.org\r
103 \r
104 -- \r
105 Anthony Towns <aj@erisian.com.au>\r
106 \r
107 --0016e641dace67919304832844ba\r
108 Content-Type: text/x-python; charset=US-ASCII; name="gmail2notmuch.py"\r
109 Content-Disposition: attachment; filename="gmail2notmuch.py"\r
110 Content-Transfer-Encoding: base64\r
111 X-Attachment-Id: f_g7ha0m5v0\r
112 \r
113 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCgojIENvcHlyaWdodCAyMDEwIEFudGhvbnkgVG93bnMgPGFq\r
114 QGVyaXNpYW4uY29tLmF1PgojIEdQTHYyKwoKZnJvbSB4bWwuZG9tIGltcG9ydCBtaW5pZG9tCmlt\r
115 cG9ydCBwaXBlcwoKbWYgPSBtaW5pZG9tLnBhcnNlKG9wZW4oIm1haWxGaWx0ZXJzLnhtbCIpKQoK\r
116 ZGVmIGdvb2cybm90bXVjaCh0ZXJtLCB2YWx1ZSk6CiAgICBpZiB0ZXJtID09ICJsaXN0IjoKCWlm\r
117 IHZhbHVlWzBdK3ZhbHVlWy0xXSBpbiBbJygpJywgJyIiJ106CgkgICAgdmFsdWUgPSB2YWx1ZVsx\r
118 Oi0xXQogICAgICAgIHJldHVybiAidG86IiArIHZhbHVlCiAgICByZXR1cm4gInRhZzpvbWctaS1n\r
119 b3QtY29uZnVzZWQiCgpmb3IgZSBpbiBtZi5jaGlsZE5vZGVzWzBdLmdldEVsZW1lbnRzQnlUYWdO\r
120 YW1lKCJlbnRyeSIpOgogICAgYWRkdGFncyA9IFtdCiAgICBkZWx0YWdzID0gW10KICAgIHNlYXJj\r
121 aCA9IFtdCiAgICBmb3IgYSBpbiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhcHBzOnByb3BlcnR5\r
122 Iik6CiAgICAgICAgbix2ID0gYS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSwgYS5nZXRBdHRyaWJ1dGUo\r
123 InZhbHVlIikKICAgICAgICBpZiBuID09ICJsYWJlbCI6CiAgICAgICAgICAgIGFkZHRhZ3MuYXBw\r
124 ZW5kKHYpCiAgICAgICAgZWxpZiBuID09ICJzaG91bGRBcmNoaXZlIiBhbmQgdiA9PSAidHJ1ZSI6\r
125 CiAgICAgICAgICAgIGRlbHRhZ3MuYXBwZW5kKCJpbmJveCIpCiAgICAgICAgZWxpZiBuID09ICJz\r
126 aG91bGRUcmFzaCIgYW5kIHYgPT0gInRydWUiOgogICAgICAgICAgICBhZGR0YWdzLmFwcGVuZCgi\r
127 ZGVsZXRlZCIpCiAgICAgICAgZWxpZiBuID09ICJzaG91bGRNYXJrQXNSZWFkIiBhbmQgdiA9PSAi\r
128 dHJ1ZSI6CiAgICAgICAgICAgIGRlbHRhZ3MuYXBwZW5kKCJ1bnJlYWQiKQogICAgICAgIGVsaWYg\r
129 biA9PSAiZnJvbSI6CiAgICAgICAgICAgIHNlYXJjaC5hcHBlbmQoImZyb206JXMiICUgdikKICAg\r
130 ICAgICBlbGlmIG4gPT0gInN1YmplY3QiOgogICAgICAgICAgICBzZWFyY2guYXBwZW5kKCJzdWJq\r
131 ZWN0OiVzIiAlIHYpCiAgICAgICAgZWxpZiBuID09ICJkb2VzTm90SGF2ZVRoZVdvcmQiIGFuZCAn\r
132 OicgaW4gdjoKICAgICAgICAgICAgc2VhcmNoLmFwcGVuZCgibm90IikKCSAgICBzZWFyY2guYXBw\r
133 ZW5kKGdvb2cybm90bXVjaCgqdi5zcGxpdCgnOicsMSkpKQogICAgICAgIGVsaWYgbiA9PSAiaGFz\r
134 VGhlV29yZCIgYW5kICc6JyBpbiB2OgoJICAgIHNlYXJjaC5hcHBlbmQoZ29vZzJub3RtdWNoKCp2\r
135 LnNwbGl0KCc6JywxKSkpCiAgICAgICAgZWxpZiBuID09ICJoYXNUaGVXb3JkIjoKICAgICAgICAg\r
136 ICAgc2VhcmNoLmFwcGVuZCh2KQogICAgICAgIGVsaWYgbiA9PSAiZG9lc05vdEhhdmVUaGVXb3Jk\r
137 IjoKICAgICAgICAgICAgc2VhcmNoLmFwcGVuZCgibm90IikKICAgICAgICAgICAgc2VhcmNoLmFw\r
138 cGVuZCh2KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJYWFggJXMgOiAlcyIgJSAo\r
139 bix2KQogICAgdGFncyA9IFsiLSIreCBmb3IgeCBpbiBkZWx0YWdzXSArIFsiKyIreCBmb3IgeCBp\r
140 biBhZGR0YWdzXQogICAgaWYgdGFncyA9PSBbXToKCXByaW50ICJXVEY/PyBOTyBUQUdTIgoJY29u\r
141 dGludWUKICAgIHRhZ3NlYXJjaCA9IHN1bShbIFsibm90IiwgInRhZzoiK3gsICJvciJdIGZvciB4\r
142 IGluIGFkZHRhZ3MgXSwgW10pCiAgICB0YWdzZWFyY2ggKz0gc3VtKFsgWyJ0YWc6Iit4LCAib3Ii\r
143 XSBmb3IgeCBpbiBkZWx0YWdzIF0sIFtdKQogICAgdGFnc2VhcmNoID0gdGFnc2VhcmNoWzotMV0K\r
144 ICAgIGlmIGxlbih0YWdzKSA+IDE6CiAgICAgICAgdGFnc2VhcmNoID0gWyIoIl0gKyB0YWdzZWFy\r
145 Y2ggKyBbIikiXQogICAgc2VhcmNoICs9IHRhZ3NlYXJjaAogICAgcHJpbnQgIm5vdG11Y2ggdGFn\r
146 ICVzIC0tICVzIiAlICgKCSIgIi5qb2luKHBpcGVzLnF1b3RlKHgpIGZvciB4IGluIHRhZ3MpLAoJ\r
147 IiAiLmpvaW4ocGlwZXMucXVvdGUoeCkgZm9yIHggaW4gc2VhcmNoKSkKCg==\r
148 --0016e641dace67919304832844ba--\r