source: publico/PloneImapClient/trunk/Header.py @ 2582

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

implementado suporte a mensagens nao multipart

File size: 4.8 KB
Linha 
1# File: Header.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
25##code-section module-header #fill in your manual code here
26import email
27from imaplib import ParseFlags
28
29coding_local = 'utf-8'
30##/code-section module-header
31
32
33
34
35class Header:
36    ''' '''
37    __implements__ = ()
38
39    ##code-section class-header_Header #fill in your manual code here
40    ##/code-section class-header_Header
41
42
43    def __init__(self,info,header):
44        #self._init_attributes(*args,**kwargs)
45        self._inicializar(info,header)
46
47    def _init_attributes(self,*args,**kwargs):
48        #attributes
49        self._to=None
50        self._cc=None
51        self._from=None
52        self._replyTo=None
53        self._subject=None
54        self._UID=None
55        self._falgs=None
56        self._date=None
57
58        # automatically set attributes where mutators exist
59        for key in kwargs.keys():
60            # camel case: variable -> setVariable
61            mutatorName = 'set'+key[0].upper()+key[1:]
62            mutator = getattr(self, mutatorName)
63            if mutator is not None and callable(mutator):
64                mutator(kwargs[key])
65
66
67    def _inicializar(self,info,header):
68        msg = email.message_from_string(header)
69       
70        self._to = email.Utils.getaddresses( self._decodificar( msg.get_all('To',[]) ) )
71        self._cc = email.Utils.getaddresses( self._decodificar( msg.get_all('Cc',[]) ) )
72        self._from = email.Utils.getaddresses( self._decodificar( msg.get_all('From',[]) ) )
73        self._replyTo = email.Utils.getaddresses( self._decodificar( msg.get_all('Reply-To',[]) ) )
74        self._subject = self._decodificar( msg.get_all('Subject',[]) ) [0] #pra tirar da tupla
75        '''
76        TODO: estudar strings templates pra pegar esse UID sem usar expregulares.
77        Isso  muito, mas muito feio, mas funciona.
78        '''
79        self._UID = info[info.find('UID') + 4 : ]
80        self._UID = int( self._UID[ : self._UID.find( ' ' ) ] )
81       
82        self._flags = ParseFlags( info )
83        self._date = self._decodificar( msg.get_all('Date',[]) ) [0]
84
85
86    def _decodificar(self,dados):
87        '''
88        TODO: tem que baixar o nivel dessa funcao, e muito ...
89        '''
90        if dados is [] or ():
91            return ['',]
92        dados = ', '.join(dados)
93        dados_aux = dados
94        try:
95            dados_aux = email.Header.Header(dados_aux)
96            dados_aux = email.Header.decode_header(dados_aux)
97            dados_aux = email.Header.make_header(dados_aux)
98            global coding_local
99            dados_aux = unicode(dados_aux).encode(coding_local)
100            return [ dados_aux ]
101        except:
102            pass
103        return [ dados ]
104
105
106
107    def headerAsString(self,):
108        pass
109
110    def extract(self,):
111        d = { 'To' : self._to,
112              'Cc' : self._cc,
113              'From' : self._from,
114              'Reply-To' : self._replyTo,
115              'Subject' : self._subject,
116              'UID' : self._UID,
117              'Flags' : self._flags,
118              'Date' : self._date
119            }
120        return d
121
122    def set_to(self,value):
123        self._to=value
124
125    def get_to(self):
126        return self._to
127
128    def set_cc(self,value):
129        self._cc=value
130
131    def get_cc(self):
132        return self._cc
133
134    def set_from(self,value):
135        self._from=value
136
137    def get_from(self):
138        return self._from
139
140    def set_replyTo(self,value):
141        self._replyTo=value
142
143    def get_replyTo(self):
144        return self._replyTo
145
146    def set_subject(self,value):
147        self._subject=value
148
149    def get_subject(self):
150        return self._subject
151
152    def set_UID(self,value):
153        self._UID=value
154
155    def get_UID(self):
156        return self._UID
157
158    def set_flags(self,value):
159        self._flags=value
160
161    def get_flags(self):
162        return self._flags
163
164    def set_date(self,value):
165        self._date=value
166
167    def get_date(self):
168        return self._date
169
170
171
172##code-section module-footer #fill in your manual code here
173##/code-section module-footer
174
175
176
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.