Mercurial > p > roundup > code
annotate roundup/mailgw.py @ 1249:6c24a86a12ae
Fixes for SourceForge tracker bugs.
- fixed filter() with no sort/group [SF#618614]
- fixed register with no session [SF#618611]
- fixed log / pid file path handling in roundup-server [SF#617981]
- fixed old gadfly compatibiltiy problem, for sure this time [SF#612873]
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 07 Oct 2002 00:52:51 +0000 |
| parents | 8dd4f736370b |
| children | 8b766547d4b8 |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
202
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
391
diff
changeset
|
17 # |
|
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
391
diff
changeset
|
18 |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
19 ''' |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
20 An e-mail gateway for Roundup. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
22 Incoming messages are examined for multiple parts: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
23 . In a multipart/mixed message or part, each subpart is extracted and |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
24 examined. The text/plain subparts are assembled to form the textual |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
25 body of the message, to be stored in the file associated with a "msg" |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
26 class node. Any parts of other types are each stored in separate files |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
27 and given "file" class nodes that are linked to the "msg" node. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
28 . In a multipart/alternative message or part, we look for a text/plain |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
29 subpart and ignore the other parts. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
30 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
31 Summary |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
32 ------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 The "summary" property on message nodes is taken from the first non-quoting |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 section in the message body. The message body is divided into sections by |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 blank lines. Sections where the second and all subsequent lines begin with |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 a ">" or "|" character are considered "quoting sections". The first line of |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 the first non-quoting section becomes the summary of the message. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
39 Addresses |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
40 --------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 All of the addresses in the To: and Cc: headers of the incoming message are |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 looked up among the user nodes, and the corresponding users are placed in |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 the "recipients" property on the new "msg" node. The address in the From: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 header similarly determines the "author" property of the new "msg" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 node. The default handling for addresses that don't have corresponding |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 users is to create new users with no passwords and a username equal to the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 address. (The web interface does not permit logins for users with no |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 passwords.) If we prefer to reject mail from outside sources, we can simply |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 register an auditor on the "user" class that prevents the creation of user |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 nodes with no passwords. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
52 Actions |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
53 ------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 The subject line of the incoming message is examined to determine whether |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 the message is an attempt to create a new item or to discuss an existing |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 item. A designator enclosed in square brackets is sought as the first thing |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 on the subject line (after skipping any "Fwd:" or "Re:" prefixes). |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 If an item designator (class name and id number) is found there, the newly |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 created "msg" node is added to the "messages" property for that item, and |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 any new "file" nodes are added to the "files" property for the item. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 If just an item class name is found there, we attempt to create a new item |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 of that class with its "messages" property initialized to contain the new |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 "msg" node and its "files" property initialized to contain any new "file" |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 nodes. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
68 Triggers |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
69 -------- |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 Both cases may trigger detectors (in the first case we are calling the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 set() method to add the message to the item's spool; in the second case we |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 are calling the create() method to create a new node). If an auditor raises |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 an exception, the original message is bounced back to the sender with the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 explanatory message given in the exception. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
76 $Id: mailgw.py,v 1.95 2002-10-07 00:52:51 richard Exp $ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 ''' |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
79 import string, re, os, mimetools, cStringIO, smtplib, socket, binascii, quopri |
|
1180
ba133c895f2d
missing import ... how odd
Richard Jones <richard@users.sourceforge.net>
parents:
1107
diff
changeset
|
80 import time, random, sys |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
81 import traceback, MimeWriter |
|
270
a4241ddd22d7
Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents:
264
diff
changeset
|
82 import hyperdb, date, password |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
84 SENDMAILDEBUG = os.environ.get('SENDMAILDEBUG', '') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
85 |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
86 class MailGWError(ValueError): |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
87 pass |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
88 |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
89 class MailUsageError(ValueError): |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
90 pass |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
91 |
|
544
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
92 class MailUsageHelp(Exception): |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
93 pass |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
94 |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
95 class Unauthorized(Exception): |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
96 """ Access denied """ |
|
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
97 |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
98 def initialiseSecurity(security): |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
99 ''' Create some Permissions and Roles on the security object |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
100 |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
101 This function is directly invoked by security.Security.__init__() |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
102 as a part of the Security object instantiation. |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
103 ''' |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
104 security.addPermission(name="Email Registration", |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
105 description="Anonymous may register through e-mail") |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
106 p = security.addPermission(name="Email Access", |
|
928
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
905
diff
changeset
|
107 description="User may use the email interface") |
|
948
8d8db618c2c3
grant email access to admin too ;)
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
108 security.addPermissionToRole('Admin', p) |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
109 |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
110 class Message(mimetools.Message): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
111 ''' subclass mimetools.Message so we can retrieve the parts of the |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
112 message... |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
113 ''' |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
114 def getPart(self): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
115 ''' Get a single part of a multipart message and return it as a new |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
116 Message instance. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
117 ''' |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
118 boundary = self.getparam('boundary') |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
119 mid, end = '--'+boundary, '--'+boundary+'--' |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
120 s = cStringIO.StringIO() |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
121 while 1: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
122 line = self.fp.readline() |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
123 if not line: |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
124 break |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
125 if line.strip() in (mid, end): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
126 break |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
127 s.write(line) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
128 if not s.getvalue().strip(): |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
129 return None |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
130 s.seek(0) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
131 return Message(s) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 |
|
573
f0513f650042
handle stripping of "AW:" from subject line
Richard Jones <richard@users.sourceforge.net>
parents:
571
diff
changeset
|
133 subject_re = re.compile(r'(?P<refwd>\s*\W?\s*(fwd|re|aw)\s*\W?\s*)*' |
|
1220
953279b8b32f
bugfix to this morning's mailgw subject RE change
Richard Jones <richard@users.sourceforge.net>
parents:
1217
diff
changeset
|
134 r'\s*(?P<quote>")?(\[(?P<classname>[^\d\s]+)(?P<nodeid>\d+)?\])?' |
|
1217
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
135 r'\s*(?P<title>[^[]+)?"?(\[(?P<args>.+?)\])?', re.I) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 class MailGW: |
|
389
7d7cb5319fc0
re-open the database as the author in mail handling
Richard Jones <richard@users.sourceforge.net>
parents:
382
diff
changeset
|
138 def __init__(self, instance, db): |
|
7d7cb5319fc0
re-open the database as the author in mail handling
Richard Jones <richard@users.sourceforge.net>
parents:
382
diff
changeset
|
139 self.instance = instance |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 self.db = db |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 |
|
824
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
142 # should we trap exceptions (normal usage) or pass them through |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
143 # (for testing) |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
144 self.trapExceptions = 1 |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
145 |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
146 def do_pipe(self): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
147 ''' Read a message from standard input and pass it to the mail handler. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
148 ''' |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
149 self.main(sys.stdin) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
150 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
151 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
152 def do_mailbox(self, filename): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
153 ''' Read a series of messages from the specified unix mailbox file and |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
154 pass each to the mail handler. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
155 ''' |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
156 # open the spool file and lock it |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
157 import fcntl, FCNTL |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
158 f = open(filename, 'r+') |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
159 fcntl.flock(f.fileno(), FCNTL.LOCK_EX) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
160 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
161 # handle and clear the mailbox |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
162 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
163 from mailbox import UnixMailbox |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
164 mailbox = UnixMailbox(f, factory=Message) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
165 # grab one message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
166 message = mailbox.next() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
167 while message: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
168 # handle this message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
169 self.handle_Message(message) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
170 message = mailbox.next() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
171 # nuke the file contents |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
172 os.ftruncate(f.fileno(), 0) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
173 except: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
174 import traceback |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
175 traceback.print_exc() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
176 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
177 fcntl.flock(f.fileno(), FCNTL.LOCK_UN) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
178 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
179 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
180 def do_pop(self, server, user='', password=''): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
181 '''Read a series of messages from the specified POP server. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
182 ''' |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
183 import getpass, poplib, socket |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
184 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
185 if not user: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
186 user = raw_input(_('User: ')) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
187 if not password: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
188 password = getpass.getpass() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
189 except (KeyboardInterrupt, EOFError): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
190 # Ctrl C or D maybe also Ctrl Z under Windows. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
191 print "\nAborted by user." |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
192 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
193 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
194 # open a connection to the server and retrieve all messages |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
195 try: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
196 server = poplib.POP3(server) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
197 except socket.error, message: |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
198 print "POP server error:", message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
199 return 1 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
200 server.user(user) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
201 server.pass_(password) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
202 numMessages = len(server.list()[1]) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
203 for i in range(1, numMessages+1): |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
204 # retr: returns |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
205 # [ pop response e.g. '+OK 459 octets', |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
206 # [ array of message lines ], |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
207 # number of octets ] |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
208 lines = server.retr(i)[1] |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
209 s = cStringIO.StringIO('\n'.join(lines)) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
210 s.seek(0) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
211 self.handle_Message(Message(s)) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
212 # delete the message |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
213 server.dele(i) |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
214 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
215 # quit the server to commit changes. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
216 server.quit() |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
217 return 0 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
218 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 def main(self, fp): |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
220 ''' fp - the file from which to read the Message. |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
221 ''' |
|
699
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
222 return self.handle_Message(Message(fp)) |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
223 |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
224 def handle_Message(self, message): |
|
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
225 '''Handle an RFC822 Message |
|
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
226 |
|
391
399340646765
handle the case where there is no file attached
Richard Jones <richard@users.sourceforge.net>
parents:
389
diff
changeset
|
227 Handle the Message object by calling handle_message() and then cope |
|
343
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
228 with any errors raised by handle_message. |
|
ab16997d9cda
Started work on supporting a pop3-fetching server
Richard Jones <richard@users.sourceforge.net>
parents:
339
diff
changeset
|
229 This method's job is to make that call and handle any |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
230 errors in a sane manner. It should be replaced if you wish to |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
231 handle errors in a different manner. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
232 ''' |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
233 # in some rare cases, a particularly stuffed-up e-mail will make |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
234 # its way into here... try to handle it gracefully |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
235 sendto = message.getaddrlist('from') |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
236 if sendto: |
|
824
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
237 if not self.trapExceptions: |
|
34eacaa7e313
Added ability for unit tests to turn off exception handling in mailgw so
Richard Jones <richard@users.sourceforge.net>
parents:
753
diff
changeset
|
238 return self.handle_message(message) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
239 try: |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
240 return self.handle_message(message) |
|
544
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
241 except MailUsageHelp: |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
242 # bounce the message back to the sender with the usage message |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
243 fulldoc = '\n'.join(string.split(__doc__, '\n')[2:]) |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
244 sendto = [sendto[0][1]] |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
245 m = [''] |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
246 m.append('\n\nMail Gateway Help\n=================') |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
247 m.append(fulldoc) |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
248 m = self.bounce_message(message, sendto, m, |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
249 subject="Mail Gateway Help") |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
250 except MailUsageError, value: |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
251 # bounce the message back to the sender with the usage message |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
252 fulldoc = '\n'.join(string.split(__doc__, '\n')[2:]) |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
253 sendto = [sendto[0][1]] |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
254 m = [''] |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
255 m.append(str(value)) |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
256 m.append('\n\nMail Gateway Help\n=================') |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
257 m.append(fulldoc) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
258 m = self.bounce_message(message, sendto, m) |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
259 except Unauthorized, value: |
|
467
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
260 # just inform the user that he is not authorized |
|
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
261 sendto = [sendto[0][1]] |
|
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
262 m = [''] |
|
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
263 m.append(str(value)) |
|
103f521810f7
Features added:
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
464
diff
changeset
|
264 m = self.bounce_message(message, sendto, m) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
265 except: |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
266 # bounce the message back to the sender with the error message |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
267 sendto = [sendto[0][1], self.instance.config.ADMIN_EMAIL] |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
268 m = [''] |
| 590 | 269 m.append('An unexpected error occurred during the processing') |
| 270 m.append('of your message. The tracker administrator is being') | |
| 271 m.append('notified.\n') | |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
272 m.append('---- traceback of failure ----') |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
273 s = cStringIO.StringIO() |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
274 import traceback |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
275 traceback.print_exc(None, s) |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
276 m.append(s.getvalue()) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
277 m = self.bounce_message(message, sendto, m) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
278 else: |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
279 # very bad-looking message - we don't even know who sent it |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
280 sendto = [self.instance.config.ADMIN_EMAIL] |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
281 m = ['Subject: badly formed message from mail gateway'] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 m.append('') |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
283 m.append('The mail gateway retrieved a message which has no From:') |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
284 m.append('line, indicating that it is corrupt. Please check your') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
285 m.append('mail gateway source. Failed message is attached.') |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
286 m.append('') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
287 m = self.bounce_message(message, sendto, m, |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
288 subject='Badly formed message from mail gateway') |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
289 |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
290 # now send the message |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
291 if SENDMAILDEBUG: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
292 open(SENDMAILDEBUG, 'w').write('From: %s\nTo: %s\n%s\n'%( |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
293 self.instance.config.ADMIN_EMAIL, ', '.join(sendto), |
|
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
294 m.getvalue())) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
295 else: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
296 try: |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
297 smtp = smtplib.SMTP(self.instance.config.MAILHOST) |
|
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
298 smtp.sendmail(self.instance.config.ADMIN_EMAIL, sendto, |
|
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
299 m.getvalue()) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
300 except socket.error, value: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
301 raise MailGWError, "Couldn't send error email: "\ |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
302 "mailhost %s"%value |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
303 except smtplib.SMTPException, value: |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
304 raise MailGWError, "Couldn't send error email: %s"%value |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
306 def bounce_message(self, message, sendto, error, |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
307 subject='Failed issue tracker submission'): |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
308 ''' create a message that explains the reason for the failed |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
309 issue submission to the author and attach the original |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
310 message. |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
311 ''' |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
312 msg = cStringIO.StringIO() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
313 writer = MimeWriter.MimeWriter(msg) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
314 writer.addheader('Subject', subject) |
|
1096
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
315 writer.addheader('From', '%s <%s>'% (self.instance.config.TRACKER_NAME, |
|
fa7df238e2d4
More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents:
1095
diff
changeset
|
316 self.instance.config.TRACKER_EMAIL)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
317 writer.addheader('To', ','.join(sendto)) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
318 writer.addheader('MIME-Version', '1.0') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
319 part = writer.startmultipartbody('mixed') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
320 part = writer.nextpart() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
321 body = part.startbody('text/plain') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
322 body.write('\n'.join(error)) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
323 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
324 # reconstruct the original message |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
325 m = cStringIO.StringIO() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
326 w = MimeWriter.MimeWriter(m) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
327 # default the content_type, just in case... |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
328 content_type = 'text/plain' |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
329 # add the headers except the content-type |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
330 for header in message.headers: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
331 header_name = header.split(':')[0] |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
332 if header_name.lower() == 'content-type': |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
333 content_type = message.getheader(header_name) |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
334 elif message.getheader(header_name): |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
335 w.addheader(header_name, message.getheader(header_name)) |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
336 # now attach the message body |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
337 body = w.startbody(content_type) |
|
521
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
338 try: |
|
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
339 message.rewindbody() |
|
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
340 except IOError: |
|
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
341 body.write("*** couldn't include message body: read from pipe ***") |
|
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
342 else: |
|
1416195a830d
[SF#502342] pipe interface
Richard Jones <richard@users.sourceforge.net>
parents:
510
diff
changeset
|
343 body.write(message.fp.read()) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
344 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
345 # attach the original message to the returned message |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
346 part = writer.nextpart() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
347 part.addheader('Content-Disposition','attachment') |
|
544
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
348 part.addheader('Content-Description','Message you sent') |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
349 part.addheader('Content-Transfer-Encoding', '7bit') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
350 body = part.startbody('message/rfc822') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
351 body.write(m.getvalue()) |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
352 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
353 writer.lastpart() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
354 return msg |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
355 |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
356 def get_part_data_decoded(self,part): |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
357 encoding = part.getencoding() |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
358 data = None |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
359 if encoding == 'base64': |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
360 # BUG: is base64 really used for text encoding or |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
361 # are we inserting zip files here. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
362 data = binascii.a2b_base64(part.fp.read()) |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
363 elif encoding == 'quoted-printable': |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
364 # the quopri module wants to work with files |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
365 decoded = cStringIO.StringIO() |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
366 quopri.decode(part.fp, decoded) |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
367 data = decoded.getvalue() |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
368 elif encoding == 'uuencoded': |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
369 data = binascii.a2b_uu(part.fp.read()) |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
370 else: |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
371 # take it as text |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
372 data = part.fp.read() |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
373 return data |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
374 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 def handle_message(self, message): |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
376 ''' message - a Message instance |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
377 |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
378 Parse the message as per the module docstring. |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
379 ''' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 # handle the subject line |
|
226
8af4945246cb
Make the mail parser a little more robust.
Richard Jones <richard@users.sourceforge.net>
parents:
224
diff
changeset
|
381 subject = message.getheader('subject', '') |
|
544
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
382 |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
383 if subject.strip() == 'help': |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
384 raise MailUsageHelp |
|
d32977eb8bd4
simple help command for mailgw
Richard Jones <richard@users.sourceforge.net>
parents:
537
diff
changeset
|
385 |
| 218 | 386 m = subject_re.match(subject) |
|
616
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
387 |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
388 # check for well-formed subject line |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
389 if m: |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
390 # get the classname |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
391 classname = m.group('classname') |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
392 if classname is None: |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
393 # no classname, fallback on the default |
|
1095
711f2ecee20f
unit tests pass again
Richard Jones <richard@users.sourceforge.net>
parents:
1090
diff
changeset
|
394 if hasattr(self.instance.config, 'MAIL_DEFAULT_CLASS') and \ |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
395 self.instance.config.MAIL_DEFAULT_CLASS: |
|
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
396 classname = self.instance.config.MAIL_DEFAULT_CLASS |
|
616
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
397 else: |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
398 # fail |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
399 m = None |
|
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
400 |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
401 if not m: |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
402 raise MailUsageError, ''' |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
403 The message you sent to roundup did not contain a properly formed subject |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
404 line. The subject must contain a class name or designator to indicate the |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
405 "topic" of the message. For example: |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
406 Subject: [issue] This is a new issue |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
407 - this will create a new issue in the tracker with the title "This is |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
408 a new issue". |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
409 Subject: [issue1234] This is a followup to issue 1234 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
410 - this will append the message's contents to the existing issue 1234 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
411 in the tracker. |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
412 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
413 Subject was: "%s" |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
414 '''%subject |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
415 |
|
616
08abec25b2c6
[SF#503204] mailgw needs a default class
Richard Jones <richard@users.sourceforge.net>
parents:
615
diff
changeset
|
416 # get the class |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
417 try: |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
418 cl = self.db.getclass(classname) |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
419 except KeyError: |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
420 raise MailUsageError, ''' |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
421 The class name you identified in the subject line ("%s") does not exist in the |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
422 database. |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
423 |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
424 Valid class names are: %s |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
425 Subject was: "%s" |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
426 '''%(classname, ', '.join(self.db.getclasses()), subject) |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
427 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
428 # get the optional nodeid |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
429 nodeid = m.group('nodeid') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
430 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
431 # title is optional too |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
432 title = m.group('title') |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
433 if title: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
434 title = title.strip() |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
435 else: |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
436 title = '' |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
437 |
|
1217
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
438 # strip off the quotes that dumb emailers put around the subject, like |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
439 # Re: "[issue1] bla blah" |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
440 if m.group('quote') and title.endswith('"'): |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
441 title = title[:-1] |
|
984c498e7deb
handle stupid mailers quoting subject lines
Richard Jones <richard@users.sourceforge.net>
parents:
1209
diff
changeset
|
442 |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
443 # but we do need either a title or a nodeid... |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
444 if nodeid is None and not title: |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
445 raise MailUsageError, ''' |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
446 I cannot match your message to a node in the database - you need to either |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
447 supply a full node identifier (with number, eg "[issue123]" or keep the |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
448 previous subject title intact so I can match that. |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
449 |
|
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
450 Subject was: "%s" |
|
438
9d97c1a4ddad
Notes from changes.
Richard Jones <richard@users.sourceforge.net>
parents:
434
diff
changeset
|
451 '''%subject |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
452 |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
453 # If there's no nodeid, check to see if this is a followup and |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
454 # maybe someone's responded to the initial mail that created an |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
455 # entry. Try to find the matching nodes with the same title, and |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
456 # use the _last_ one matched (since that'll _usually_ be the most |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
457 # recent...) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
458 if nodeid is None and m.group('refwd'): |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
459 l = cl.stringFind(title=title) |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
460 if l: |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
461 nodeid = l[-1] |
|
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
462 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
463 # if a nodeid was specified, make sure it's valid |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
464 if nodeid is not None and not cl.hasnode(nodeid): |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
465 raise MailUsageError, ''' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
466 The node specified by the designator in the subject of your message ("%s") |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
467 does not exist. |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
468 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
469 Subject was: "%s" |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
470 '''%(nodeid, subject) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
471 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
472 # |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
473 # handle the users |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
474 # |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
475 # Don't create users if anonymous isn't allowed to register |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
476 create = 1 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
477 anonid = self.db.user.lookup('anonymous') |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
478 if not self.db.security.hasPermission('Email Registration', anonid): |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
479 create = 0 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
480 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
481 # ok, now figure out who the author is - create a new user if the |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
482 # "create" flag is true |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
483 author = uidFromAddress(self.db, message.getaddrlist('from')[0], |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
484 create=create) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
485 |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
486 # if we're not recognised, and we don't get added as a user, then we |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
487 # must be anonymous |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
488 if not author: |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
489 author = anonid |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
490 |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
491 # make sure the author has permission to use the email interface |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
492 if not self.db.security.hasPermission('Email Access', author): |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
493 if author == anonid: |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
494 # we're anonymous and we need to be a registered user |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
495 raise Unauthorized, ''' |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
496 You are not a registered user. |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
497 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
498 Unknown address: %s |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
499 '''%message.getaddrlist('from')[0][1] |
|
1234
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
500 else: |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
501 # we're registered and we're _still_ not allowed access |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
502 raise Unauthorized, 'You are not permitted to access '\ |
|
c0a3b1c49ef7
fixed the mailgw so that anonymous users may still access it
Richard Jones <richard@users.sourceforge.net>
parents:
1220
diff
changeset
|
503 'this tracker.' |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
504 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
505 # make sure they're allowed to edit this class of information |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
506 if not self.db.security.hasPermission('Edit', author, classname): |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
507 raise Unauthorized, 'You are not permitted to edit %s.'%classname |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
508 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
509 # the author may have been created - make sure the change is |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
510 # committed before we reopen the database |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
511 self.db.commit() |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
512 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
513 # reopen the database as the author |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
514 username = self.db.user.get(author, 'username') |
|
1204
b862bbf2067a
Replaced the content() callback ickiness with Page Template macro usage
Richard Jones <richard@users.sourceforge.net>
parents:
1180
diff
changeset
|
515 self.db.close() |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
516 self.db = self.instance.open(username) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
517 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
518 # re-get the class with the new database connection |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
519 cl = self.db.getclass(classname) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
520 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
521 # now update the recipients list |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
522 recipients = [] |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
523 tracker_email = self.instance.config.TRACKER_EMAIL.lower() |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
524 for recipient in message.getaddrlist('to') + message.getaddrlist('cc'): |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
525 r = recipient[1].strip().lower() |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
526 if r == tracker_email or not r: |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
527 continue |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
528 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
529 # look up the recipient - create if necessary (and we're |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
530 # allowed to) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
531 recipient = uidFromAddress(self.db, recipient, create) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
532 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
533 # if all's well, add the recipient to the list |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
534 if recipient: |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
535 recipients.append(recipient) |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
536 |
|
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1096
diff
changeset
|
537 # |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
538 # extract the args |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
539 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
540 subject_args = m.group('args') |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
541 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
542 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
543 # handle the subject argument list |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
544 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
545 # figure what the properties of this Class are |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
546 properties = cl.getprops() |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
547 props = {} |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
548 args = m.group('args') |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
549 if args: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
550 errors = [] |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
551 for prop in string.split(args, ';'): |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
552 # extract the property name and value |
|
287
ee2f4cb160bd
Implemented the comma-separated printing option in the admin tool.
Richard Jones <richard@users.sourceforge.net>
parents:
286
diff
changeset
|
553 try: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
554 propname, value = prop.split('=') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
555 except ValueError, message: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
556 errors.append('not of form [arg=value,' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
557 'value,...;arg=value,value...]') |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
558 break |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
559 |
|
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
560 # ensure it's a valid property name |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
561 propname = propname.strip() |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
562 try: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
563 proptype = properties[propname] |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
564 except KeyError: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
565 errors.append('refers to an invalid property: ' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
566 '"%s"'%propname) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
567 continue |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
568 |
|
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
569 # convert the string value to a real property value |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
570 if isinstance(proptype, hyperdb.String): |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
571 props[propname] = value.strip() |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
572 if isinstance(proptype, hyperdb.Password): |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
573 props[propname] = password.Password(value.strip()) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
574 elif isinstance(proptype, hyperdb.Date): |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
575 try: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
576 props[propname] = date.Date(value.strip()) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
577 except ValueError, message: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
578 errors.append('contains an invalid date for ' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
579 '%s.'%propname) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
580 elif isinstance(proptype, hyperdb.Interval): |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
581 try: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
582 props[propname] = date.Interval(value) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
583 except ValueError, message: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
584 errors.append('contains an invalid date interval' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
585 'for %s.'%propname) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
586 elif isinstance(proptype, hyperdb.Link): |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
587 linkcl = self.db.classes[proptype.classname] |
|
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
588 propkey = linkcl.labelprop(default_to_id=1) |
|
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
589 try: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
590 props[propname] = linkcl.lookup(value) |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
591 except KeyError, message: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
592 errors.append('"%s" is not a value for %s.'%(value, |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
593 propname)) |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
594 elif isinstance(proptype, hyperdb.Multilink): |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
595 # get the linked class |
|
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
596 linkcl = self.db.classes[proptype.classname] |
|
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
597 propkey = linkcl.labelprop(default_to_id=1) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
598 if nodeid: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
599 curvalue = cl.get(nodeid, propname) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
600 else: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
601 curvalue = [] |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
602 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
603 # handle each add/remove in turn |
|
847
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
604 # keep an extra list for all items that are |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
605 # definitely in the new list (in case of e.g. |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
606 # <propname>=A,+B, which should replace the old |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
607 # list with A,B) |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
608 set = 0 |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
609 newvalue = [] |
|
537
ad6dbc21a570
[SF#503340] creating issue with [asignedto=p.ohly]
Richard Jones <richard@users.sourceforge.net>
parents:
524
diff
changeset
|
610 for item in value.split(','): |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
611 item = item.strip() |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
612 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
613 # handle +/- |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
614 remove = 0 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
615 if item.startswith('-'): |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
616 remove = 1 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
617 item = item[1:] |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
618 elif item.startswith('+'): |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
619 item = item[1:] |
|
847
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
620 else: |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
621 set = 1 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
622 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
623 # look up the value |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
624 try: |
|
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
625 item = linkcl.lookup(item) |
|
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
626 except KeyError, message: |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
627 errors.append('"%s" is not a value for %s.'%(item, |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
628 propname)) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
629 continue |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
630 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
631 # perform the add/remove |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
632 if remove: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
633 try: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
634 curvalue.remove(item) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
635 except ValueError: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
636 errors.append('"%s" is not currently in ' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
637 'for %s.'%(item, propname)) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
638 continue |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
639 else: |
|
847
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
640 newvalue.append(item) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
641 if item not in curvalue: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
642 curvalue.append(item) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
643 |
|
847
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
644 # that's it, set the new Multilink property value, |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
645 # or overwrite it completely |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
646 if set: |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
647 props[propname] = newvalue |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
648 else: |
|
0f0f6049c9a7
made mailgw handle set and modify operations on multilinks [SF#579094]
Richard Jones <richard@users.sourceforge.net>
parents:
824
diff
changeset
|
649 props[propname] = curvalue |
|
880
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
650 elif isinstance(proptype, hyperdb.Boolean): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
651 value = value.strip() |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
652 props[propname] = value.lower() in ('yes', 'true', 'on', '1') |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
653 elif isinstance(proptype, hyperdb.Number): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
654 value = value.strip() |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
847
diff
changeset
|
655 props[propname] = int(value) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
656 |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
657 # handle any errors parsing the argument list |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
658 if errors: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
659 errors = '\n- '.join(errors) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
660 raise MailUsageError, ''' |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
661 There were problems handling your subject line argument list: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
662 - %s |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
663 |
|
560
d7b9751f8927
Mail gateway improvements.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
545
diff
changeset
|
664 Subject was: "%s" |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
665 '''%(errors, subject) |
|
434
2441743e335b
Removed generation of change note from "sendmessage" in roundupdb.py.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
431
diff
changeset
|
666 |
|
264
a671e5917b33
Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
244
diff
changeset
|
667 # |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
668 # handle message-id and in-reply-to |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
669 # |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
670 messageid = message.getheader('message-id') |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
671 inreplyto = message.getheader('in-reply-to') or '' |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
672 # generate a messageid if there isn't one |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
673 if not messageid: |
|
499
9ad589d0a60f
Changed message-id format to "<%s.%s.%s%s@%s>" so it complies with RFC822
Richard Jones <richard@users.sourceforge.net>
parents:
476
diff
changeset
|
674 messageid = "<%s.%s.%s%s@%s>"%(time.time(), random.random(), |
|
1085
04a6b3bfbf23
instance_config -> config, and other related cleanups
Richard Jones <richard@users.sourceforge.net>
parents:
948
diff
changeset
|
675 classname, nodeid, self.instance.config.MAIL_DOMAIN) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
676 |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
677 # |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
678 # now handle the body - find the message |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
679 # |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
680 content_type = message.gettype() |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
681 attachments = [] |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
682 # General multipart handling: |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
683 # Take the first text/plain part, anything else is considered an |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
684 # attachment. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
685 # multipart/mixed: multiple "unrelated" parts. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
686 # multipart/signed (rfc 1847): |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
687 # The control information is carried in the second of the two |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
688 # required body parts. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
689 # ACTION: Default, so if content is text/plain we get it. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
690 # multipart/encrypted (rfc 1847): |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
691 # The control information is carried in the first of the two |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
692 # required body parts. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
693 # ACTION: Not handleable as the content is encrypted. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
694 # multipart/related (rfc 1872, 2112, 2387): |
|
661
cdcee6721841
. [SF#517734] web header customisation is obscure
Richard Jones <richard@users.sourceforge.net>
parents:
616
diff
changeset
|
695 # The Multipart/Related content-type addresses the MIME |
|
cdcee6721841
. [SF#517734] web header customisation is obscure
Richard Jones <richard@users.sourceforge.net>
parents:
616
diff
changeset
|
696 # representation of compound objects. |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
697 # ACTION: Default. If we are lucky there is a text/plain. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
698 # TODO: One should use the start part and look for an Alternative |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
699 # that is text/plain. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
700 # multipart/Alternative (rfc 1872, 1892): |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
701 # only in "related" ? |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
702 # multipart/report (rfc 1892): |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
703 # e.g. mail system delivery status reports. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
704 # ACTION: Default. Could be ignored or used for Delivery Notification |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
705 # flagging. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
706 # multipart/form-data: |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
707 # For web forms only. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
708 if content_type == 'multipart/mixed': |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
709 # skip over the intro to the first boundary |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
710 part = message.getPart() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
711 content = None |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
712 while 1: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
713 # get the next part |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
714 part = message.getPart() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
715 if part is None: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
716 break |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
717 # parse it |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
718 subtype = part.gettype() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
719 if subtype == 'text/plain' and not content: |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
720 # The first text/plain part is the message content. |
|
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
721 content = self.get_part_data_decoded(part) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
722 elif subtype == 'message/rfc822': |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
723 # handle message/rfc822 specially - the name should be |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
724 # the subject of the actual e-mail embedded here |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
725 i = part.fp.tell() |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
726 mailmess = Message(part.fp) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
727 name = mailmess.getheader('subject') |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
728 part.fp.seek(i) |
|
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
729 attachments.append((name, 'message/rfc822', part.fp.read())) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
730 else: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
731 # try name on Content-Type |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
732 name = part.getparam('name') |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
733 # this is just an attachment |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
734 data = self.get_part_data_decoded(part) |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
735 attachments.append((name, part.gettype(), data)) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
736 if content is None: |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
737 raise MailUsageError, ''' |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
738 Roundup requires the submission to be plain text. The message parser could |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
739 not find a text/plain part to use. |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
740 ''' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
741 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
742 elif content_type[:10] == 'multipart/': |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
743 # skip over the intro to the first boundary |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
744 message.getPart() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
745 content = None |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
746 while 1: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
747 # get the next part |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
748 part = message.getPart() |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
749 if part is None: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
750 break |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
751 # parse it |
|
110
19686b60e410
Multipart message class has the getPart method now. Added some tests for it.
Richard Jones <richard@users.sourceforge.net>
parents:
103
diff
changeset
|
752 if part.gettype() == 'text/plain' and not content: |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
753 content = self.get_part_data_decoded(part) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
754 if content is None: |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
755 raise MailUsageError, ''' |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
756 Roundup requires the submission to be plain text. The message parser could |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
757 not find a text/plain part to use. |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
758 ''' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
759 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
760 elif content_type != 'text/plain': |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
761 raise MailUsageError, ''' |
|
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
762 Roundup requires the submission to be plain text. The message parser could |
|
286
2313560b8477
Initial cut at trying to handle people responding to CC'ed messages...
Richard Jones <richard@users.sourceforge.net>
parents:
270
diff
changeset
|
763 not find a text/plain part to use. |
|
221
152fedaab07c
Added better error handling to mailgw.
Richard Jones <richard@users.sourceforge.net>
parents:
218
diff
changeset
|
764 ''' |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
765 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
766 else: |
|
609
633f2b542146
Clean up mail handling, multipart handling.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
599
diff
changeset
|
767 content = self.get_part_data_decoded(message) |
|
599
08aae4d34622
respect encodings in non multipart messages.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
595
diff
changeset
|
768 |
|
734
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
769 # figure how much we should muck around with the email body |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
770 keep_citations = getattr(self.instance, 'EMAIL_KEEP_QUOTED_TEXT', |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
771 'no') == 'yes' |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
772 keep_body = getattr(self.instance, 'EMAIL_LEAVE_BODY_UNCHANGED', |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
773 'no') == 'yes' |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
774 |
|
a55c0622dced
Added note to MIGRATION about new config vars.
Richard Jones <richard@users.sourceforge.net>
parents:
710
diff
changeset
|
775 # parse the body of the message, stripping out bits as appropriate |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
776 summary, content = parseContent(content, keep_citations, |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
777 keep_body) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
778 |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
779 # |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
780 # handle the attachments |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
781 # |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
782 files = [] |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
783 for (name, mime_type, data) in attachments: |
|
545
d276d72ebdaf
if the attachment has no name, name it unnamed, happens with tnefs.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
544
diff
changeset
|
784 if not name: |
|
d276d72ebdaf
if the attachment has no name, name it unnamed, happens with tnefs.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
544
diff
changeset
|
785 name = "unnamed" |
|
411
a6088556e9ba
Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
786 files.append(self.db.file.create(type=mime_type, name=name, |
|
172
c580555a6508
mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
787 content=data)) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
788 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
789 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
790 # create the message if there's a message body (content) |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
791 # |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
792 if content: |
|
172
c580555a6508
mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
793 message_id = self.db.msg.create(author=author, |
|
c580555a6508
mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
794 recipients=recipients, date=date.Date('.'), summary=summary, |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
795 content=content, files=files, messageid=messageid, |
|
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
796 inreplyto=inreplyto) |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
797 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
798 # attach the message to the node |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
799 if nodeid: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
800 # add the message to the node's list |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
801 messages = cl.get(nodeid, 'messages') |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
802 messages.append(message_id) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
803 props['messages'] = messages |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
804 else: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
805 # pre-load the messages list |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
806 props['messages'] = [message_id] |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
807 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
808 # set the title to the subject |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
809 if properties.has_key('title') and not props.has_key('title'): |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
810 props['title'] = title |
|
475
a1a44636bace
Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents:
467
diff
changeset
|
811 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
812 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
813 # perform the node change / create |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
814 # |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
815 try: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
816 if nodeid: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
817 cl.set(nodeid, **props) |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
818 else: |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
819 nodeid = cl.create(**props) |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
820 except (TypeError, IndexError, ValueError), message: |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
821 raise MailUsageError, ''' |
|
379
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
822 There was a problem with the message you sent: |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
823 %s |
|
c7b5b1aa6b4a
More error handling fixes.
Richard Jones <richard@users.sourceforge.net>
parents:
367
diff
changeset
|
824 '''%message |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
825 |
|
753
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
826 # commit the changes to the DB |
|
938edfdeac6e
Sorry about this huge checkin!
Richard Jones <richard@users.sourceforge.net>
parents:
736
diff
changeset
|
827 self.db.commit() |
|
430
350685601f37
Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents:
419
diff
changeset
|
828 |
|
699
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
829 return nodeid |
|
676d4cfde9a5
Nosy list improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
694
diff
changeset
|
830 |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
831 def extractUserFromList(userClass, users): |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
832 '''Given a list of users, try to extract the first non-anonymous user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
833 and return that user, otherwise return None |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
834 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
835 if len(users) > 1: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
836 for user in users: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
837 # make sure we don't match the anonymous or admin user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
838 if userClass.get(user, 'username') in ('admin', 'anonymous'): |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
839 continue |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
840 # first valid match will do |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
841 return user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
842 # well, I guess we have no choice |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
843 return user[0] |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
844 elif users: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
845 return users[0] |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
846 return None |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
847 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
848 def uidFromAddress(db, address, create=1): |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
849 ''' address is from the rfc822 module, and therefore is (name, addr) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
850 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
851 user is created if they don't exist in the db already |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
852 ''' |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
853 (realname, address) = address |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
854 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
855 # try a straight match of the address |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
856 user = extractUserFromList(db.user, db.user.stringFind(address=address)) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
857 if user is not None: return user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
858 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
859 # try the user alternate addresses if possible |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
860 props = db.user.getprops() |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
861 if props.has_key('alternate_addresses'): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1244
diff
changeset
|
862 users = db.user.filter(None, {'alternate_addresses': address}) |
|
905
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
863 user = extractUserFromList(db.user, users) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
864 if user is not None: return user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
865 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
866 # try to match the username to the address (for local |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
867 # submissions where the address is empty) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
868 user = extractUserFromList(db.user, db.user.stringFind(username=address)) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
869 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
870 # couldn't match address or username, so create a new user |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
871 if create: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
872 return db.user.create(username=address, address=address, |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
873 realname=realname, roles=db.config.NEW_EMAIL_USER_ROLES) |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
874 else: |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
875 return 0 |
|
502a5ae11cc5
Very close now. The cgi and mailgw now use the new security API.
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
876 |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
877 def parseContent(content, keep_citations, keep_body, |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
878 blank_line=re.compile(r'[\r\n]+\s*[\r\n]+'), |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
879 eol=re.compile(r'[\r\n]+'), |
|
706
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
880 signature=re.compile(r'^[>|\s]*[-_]+\s*$'), |
| 710 | 881 original_message=re.compile(r'^[>|\s]*-----Original Message-----$')): |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
882 ''' The message body is divided into sections by blank lines. |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
883 Sections where the second and all subsequent lines begin with a ">" |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
884 or "|" character are considered "quoting sections". The first line of |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
885 the first non-quoting section becomes the summary of the message. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
886 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
887 If keep_citations is true, then we keep the "quoting sections" in the |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
888 content. |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
889 If keep_body is true, we even keep the signature sections. |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
890 ''' |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
891 # strip off leading carriage-returns / newlines |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
892 i = 0 |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
893 for i in range(len(content)): |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
894 if content[i] not in '\r\n': |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
895 break |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
896 if i > 0: |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
897 sections = blank_line.split(content[i:]) |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
898 else: |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
899 sections = blank_line.split(content) |
|
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
900 |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
901 # extract out the summary from the message |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
902 summary = '' |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
903 l = [] |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
904 for section in sections: |
|
334
256776bfdfc5
fixed [SF#474749] Indentations lost
Richard Jones <richard@users.sourceforge.net>
parents:
321
diff
changeset
|
905 #section = section.strip() |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
906 if not section: |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
907 continue |
|
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
908 lines = eol.split(section) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
909 if (lines[0] and lines[0][0] in '>|') or (len(lines) > 1 and |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
910 lines[1] and lines[1][0] in '>|'): |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
911 # see if there's a response somewhere inside this section (ie. |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
912 # no blank line between quoted message and response) |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
913 for line in lines[1:]: |
|
1209
e47d9bb1455b
[SF#614188] Exception in mailgw.py
Richard Jones <richard@users.sourceforge.net>
parents:
1204
diff
changeset
|
914 if line and line[0] not in '>|': |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
915 break |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
916 else: |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
917 # we keep quoted bits if specified in the config |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
918 if keep_citations: |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
919 l.append(section) |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
920 continue |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
921 # keep this section - it has reponse stuff in it |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
922 if not summary: |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
923 # and while we're at it, use the first non-quoted bit as |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
924 # our summary |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
925 summary = line |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
926 lines = lines[lines.index(line):] |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
927 section = '\n'.join(lines) |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
928 |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
929 if not summary: |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
930 # if we don't have our summary yet use the first line of this |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
931 # section |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
932 summary = lines[0] |
|
706
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
933 elif signature.match(lines[0]) and 2 <= len(lines) <= 10: |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
934 # lose any signature |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
935 break |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
936 elif original_message.match(lines[0]): |
|
7ba403bffed5
Tweaking the signature deletion from mail messages.
Richard Jones <richard@users.sourceforge.net>
parents:
699
diff
changeset
|
937 # ditch the stupid Outlook quoting of the entire original message |
| 454 | 938 break |
|
510
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
939 |
|
3f6107488465
followup lines directly after a quoted section were being eaten.
Richard Jones <richard@users.sourceforge.net>
parents:
499
diff
changeset
|
940 # and add the section to the output |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
941 l.append(section) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
942 |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
943 # Now reconstitute the message content minus the bits we don't care |
|
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
944 # about. |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
945 if not keep_body: |
|
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
946 content = '\n\n'.join(l) |
|
1107
1c1ccfc9673d
reorganised mailgw code
Richard Jones <richard@users.sourceforge.net>
parents:
1103
diff
changeset
|
947 |
|
694
34dbcdfb2fe1
stripping of email message body can be controlled through config variables...
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
661
diff
changeset
|
948 return summary, content |
|
198
eda506860b32
Implemented correct mail splitting (was taking a shortcut).
Richard Jones <richard@users.sourceforge.net>
parents:
172
diff
changeset
|
949 |
|
127
0791d13baea7
Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents:
110
diff
changeset
|
950 # vim: set filetype=python ts=4 sw=4 et si |
