source: publico/PloneImapClient/trunk/ImapClient.py @ 2591

Última Alteração nesse arquivo desde 2591 foi 2591, incluída por johnnysouza, 13 anos atrás

nada significativo

File size: 11.1 KB
Linha 
1# File: ImapClient.py
2#
3# Copyright (c) 2006 by Interlegis
4# Generator: ArchGenXML Version 1.4.0-RC2 svn/development
5#            http://plone.org/products/archgenxml
6#
7# GNU General Public Licence (GPL)
8#
9# This program is free software; you can redistribute it and/or modify it under
10# the terms of the GNU General Public License as published by the Free Software
11# Foundation; either version 2 of the License, or (at your option) any later
12# version.
13# This program is distributed in the hope that it will be useful, but WITHOUT
14# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
16# details.
17# You should have received a copy of the GNU General Public License along with
18# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
19# Place, Suite 330, Boston, MA  02111-1307  USA
20#
21__author__  = '''STC Interlegis <stc@interlegis.gov.br>'''
22__docformat__ = 'plaintext'
23
24
25from AccessControl import ClassSecurityInfo
26from Products.Archetypes.atapi import *
27from Products.PloneImapClient.interfaces.IImapClient import IImapClient
28
29
30from Products.Archetypes.SQLStorage import *
31# additional imports from tagged value 'import'
32import imaplib
33from Products.PloneImapClient.Cache import Cache
34import email
35
36from Products.PloneImapClient.config import *
37
38from Products.CMFCore.utils import UniqueObject
39
40   
41##code-section module-header #fill in your manual code here
42##/code-section module-header
43
44schema=Schema((
45    StringField('conecoes',
46        widget=StringWidget(
47            visible=0,
48            label='Conecoes',
49            label_msgid='PloneImapClient_label_conecoes',
50            description_msgid='PloneImapClient_help_conecoes',
51            i18n_domain='PloneImapClient',
52        )
53    ),
54
55    StringField('caches',
56        widget=StringWidget(
57            visible=0,
58            label='Caches',
59            label_msgid='PloneImapClient_label_caches',
60            description_msgid='PloneImapClient_help_caches',
61            i18n_domain='PloneImapClient',
62        )
63    ),
64
65    StringField('IMAPServer',
66        widget=StringWidget(
67            visible=1,
68            label='Imapserver',
69            label_msgid='PloneImapClient_label_IMAPServer',
70            description_msgid='PloneImapClient_help_IMAPServer',
71            i18n_domain='PloneImapClient',
72        )
73    ),
74
75    StringField('SMTPServer',
76        widget=StringWidget(
77            visible=1,
78            label='Smtpserver',
79            label_msgid='PloneImapClient_label_SMTPServer',
80            description_msgid='PloneImapClient_help_SMTPServer',
81            i18n_domain='PloneImapClient',
82        )
83    ),
84
85    StringField('coding',
86        widget=StringWidget(
87            label='Coding',
88            label_msgid='PloneImapClient_label_coding',
89            description_msgid='PloneImapClient_help_coding',
90            i18n_domain='PloneImapClient',
91        )
92    ),
93
94    StringField('folderIN',
95        widget=StringWidget(
96            label='Folderin',
97            label_msgid='PloneImapClient_label_folderIN',
98            description_msgid='PloneImapClient_help_folderIN',
99            i18n_domain='PloneImapClient',
100        )
101    ),
102
103    StringField('folderOUT',
104        widget=StringWidget(
105            label='Folderout',
106            label_msgid='PloneImapClient_label_folderOUT',
107            description_msgid='PloneImapClient_help_folderOUT',
108            i18n_domain='PloneImapClient',
109        )
110    ),
111
112    StringField('folderTrash',
113        widget=StringWidget(
114            label='Foldertrash',
115            label_msgid='PloneImapClient_label_folderTrash',
116            description_msgid='PloneImapClient_help_folderTrash',
117            i18n_domain='PloneImapClient',
118        )
119    ),
120
121),
122)
123
124
125##code-section after-local-schema #fill in your manual code here
126##/code-section after-local-schema
127
128ImapClient_schema = BaseSchema + \
129    schema
130
131##code-section after-schema #fill in your manual code here
132##/code-section after-schema
133
134class ImapClient(UniqueObject,BaseContent):
135    """
136    <p>Tool do PloneImapClient</p>
137    """
138    security = ClassSecurityInfo()
139    __implements__ = (getattr(UniqueObject,'__implements__',()),) + (getattr(BaseContent,'__implements__',()),) + (IImapClient,)
140
141
142    # This name appears in the 'add' box
143    archetype_name             = 'PloneImapClient Tool'
144
145    meta_type                  = 'ImapClient'
146    portal_type                = 'ImapClient'
147    allowed_content_types      = []
148    filter_content_types       = 0
149    global_allow               = 0
150    allow_discussion           = 0
151    #content_icon               = 'ImapClient.gif'
152    immediate_view             = 'base_view'
153    default_view               = 'base_view'
154    suppl_views                = ()
155    typeDescription            = "PloneImapClient Tool"
156    typeDescMsgId              = 'description_edit_imapclient'
157    #toolicon                   = 'ImapClient.gif'
158
159    schema = ImapClient_schema
160
161    ##code-section class-header #fill in your manual code here
162    ##/code-section class-header
163
164
165    # tool-constructors have no id argument, the id is fixed
166    def __init__(self, id=None):
167        BaseContent.__init__(self,'portal_imapclient')
168       
169        ##code-section constructor-footer #fill in your manual code here
170        self.caches = []
171        self.conecoes = []
172        ##/code-section constructor-footer
173
174
175
176    #Methods
177
178    security.declarePublic('getConecaoIndex')
179    def getConecaoIndex(self,):
180        """
181       
182        """
183        mt = getToolByName(self,'portal_membership')
184        membro = mt.getAuthenticatedMember()
185
186        for i in xrange(len(self.conecoes)):
187            if self.conecoes[i][0] == str(membro):
188                try:
189                    self.conecoes[0][1].noop()
190                    return i
191                except:
192                    self.conecoes.__delitem__(i)
193                break
194       
195        # se no tiver uma conecao, retorna uma nova
196
197        c = imaplib.IMAP4(self.IMAPServer)
198        c.login(membro.getProperty('email_id',''), membro.getProperty('email_pass',''))
199        self.conecoes.append( [ str(membro), c ] )
200       
201        return len( self.conecoes ) - 1
202
203
204
205    security.declarePublic('getCacheIndex')
206    def getCacheIndex(self,):
207        """
208       
209        """
210        mt = getToolByName(self,'portal_membership')
211        membro = mt.getAuthenticatedMember()
212
213        for i in xrange(len(self.caches)):
214            if self.caches[i].getUser() == str(membro):
215                    return i
216       
217        # se no tiver uma conecao, retorna uma nova
218        cache = Cache(user=str(membro), _tool=self )
219        self.caches.append( cache )
220       
221        return len( self.caches ) - 1
222
223
224
225    security.declarePublic('atualizarCache')
226    def atualizarCache(self,):
227        """
228       
229        """
230        #cache = self.getCache(user)
231        #cache.atualizar()
232        pass
233
234
235
236    security.declarePublic('markAsREad')
237    def markAsREad(self,folder,UID):
238        """
239       
240        """
241       
242        pass
243
244
245    security.declarePublic('getMail')
246    def getMail(self,folder='INBOX',UID=0):
247        """
248        Pega uma mensagem do sevidor e retorna o seu texto.
249        """
250        index = self.getCacheIndex()
251        msg = self.caches[index].getMail(folder,UID)
252        mail = []
253        if msg.is_multipart():
254            for i in msg.walk():
255                if i.get_content_type() == 'text/plain':
256                    part = i.get_payload(decode=1)
257                    try:
258                        mail.append(part.decode(i.get_content_charset()).encode('UTF-8'))
259                    except:
260                        mail.append(part)
261        elif msg.get_content_type() == 'text/plain':
262            text = msg.get_payload(decode=1)
263            try:
264                mail.append(text.decode(msg.get_content_charset()).encode('UTF-8'))
265            except:
266                mail.append(text)
267
268        return tuple(mail)
269
270
271
272    security.declarePublic('getHeaders')
273    def getHeaders(self,folder):
274        """
275            Pega os Headers da Cache e trata-os, possibilitando uso na ZMI       
276        """
277        i = self.getCacheIndex()
278        h= self.caches[i].get_headers(folder)
279        h2 = []
280        for j in h:
281            h2.append(j.extract())
282        return h2
283
284
285
286    security.declarePublic('getFolders')
287    def getFolders(self,):
288        """
289       
290        """
291        i = self.getCacheIndex()
292        return self.caches[i].get_folders()
293
294
295
296    security.declarePublic('sentMail')
297    def sentMail(self,mail):
298        """
299       
300        """
301       
302        pass
303
304
305
306    security.declarePublic('delMail')
307    def delMail(self,folder,index):
308        """
309       
310        """
311       
312        pass
313
314
315
316    security.declarePublic('moveMail')
317    def moveMail(self,folder,index,destino):
318        """
319       
320        """
321       
322        pass
323
324
325
326    security.declarePublic('copyMail')
327    def copyMail(self,folder):
328        """
329       
330        """
331       
332        pass
333
334
335
336    security.declarePublic('newFolder')
337    def newFolder(self,pai,nome):
338        """
339       
340        """
341       
342        pass
343
344
345
346    security.declarePublic('delFolder')
347    def delFolder(self,nome):
348        """
349       
350        """
351       
352        pass
353
354
355
356    security.declarePublic('getListaAnexos')
357    def getListaAnexos(self,folder='INBOX',UID=0):
358        """
359        Pega uma mensagem do sevidor e retorna uma lista de seus anexos.
360        """
361        index = self.getCacheIndex()
362        msg = self.caches[index].getMail(folder,UID)
363        anexos = []
364        if msg.is_multipart():
365            contents = msg.get_payload()
366            for i in xrange(len(contents)):
367                if contents[i].get_content_type() != 'text/plain':
368                    anexos.append( ( i , contents[i].get_content_type(), contents[i].get_filename('Anexo %d' % i) ) )
369        elif msg.get_content_type() != 'text/plain':
370            anexos.append( ( 0 , msg.get_content_type(), msg.get_filename('Anexo %d' % 0) ) )
371       
372        return tuple(anexos)
373
374
375
376    security.declarePublic('getAnexo')
377    def getAnexo(self,folder='INBOX',UID=0, num=0,RESPONSE=None):
378        """
379        Pega uma mensagem do sevidor e retorna um de seus anexos.
380        """
381       
382        index = self.getCacheIndex()
383        msg = self.caches[index].getMail(folder,UID)
384        if msg.is_multipart():
385            anexo = msg.get_payload()[num]
386        else:
387            anexo = msg
388       
389        RESPONSE.setHeader('Content-Type', anexo.get_content_type())
390        RESPONSE.setHeader('Content-Disposition', 'filename='+anexo.get_filename('Anexo %d' % num))
391               
392        return anexo.get_payload(decode=1)
393
394
395    #manually created methods
396
397    def maskAsRead(self,folder,UID):
398        """
399        Marca um e-mail como lido
400        TODO implementar marcar como lida no servidor mas sem ler
401        """
402        index = self.getCacheIndex()
403        return self._caches[index].markAsRead(folder,UID)
404
405
406def modify_fti(fti):
407    # hide unnecessary tabs (usability enhancement)
408    for a in fti['actions']:
409        if a['id'] in ['metadata']:
410            a['visible'] = 0
411    return fti
412
413registerType(ImapClient,PROJECTNAME)
414# end of class ImapClient
415
416##code-section module-footer #fill in your manual code here
417##/code-section module-footer
418
419
420
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.