def get_msg_part( request, folder, uid, part_number, inline = False ): '''Gets a message part. ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin( request ) folder = M[folder_name] message = folder[int(uid)] part = message.bodystructure.find_part(part_number) response = HttpResponse(content_type='%s/%s' % (part.media, part.media_subtype)) if part.filename(): filename = part.filename() else: filename = _('Unknown') if inline: response['Content-Disposition'] = 'inline; filename=%s' % filename else: response['Content-Disposition'] = 'attachment; filename=%s' % filename if part.media.upper() == 'TEXT': response['Content-Type'] = '%s/%s; charset=%s' % (part.media, part.media_subtype, part.charset()) else: response['Content-Type'] = '%s/%s' % (part.media, part.media_subtype) response.write( message.part(part) ) response.close() return response
def reply_all_message(request, folder, uid): '''Reply to a message''' # Get the message M = serverLogin(request) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Extract the relevant headers to_addr = mail_addr_str(message.envelope['env_from'][0]) cc_addr = join_address_list(message.envelope['env_to'] + message.envelope['env_cc']) subject = _('Re: ') + message.envelope['env_subject'].decode('utf-8') # Extract the message text text = '' for part in message.bodystructure.serial_message(): if part.is_text() and part.test_plain(): text += message.part(part) # Quote the message text = quote_wrap_lines(text) text = (mail_addr_name_str(message.envelope['env_from'][0]) + _(' wrote:\n') + text) # Invoque the compose message form return send_message(request, text=text, to_addr=to_addr, cc_addr=cc_addr, subject=subject)
def show_folders_view(request): '''Show the account folders. ''' # Login to the server: M = serverLogin(request) # Special folders # TODO: will get this from the user config M.set_special_folders('INBOX', 'INBOX.Drafts', 'INBOX.Templates') # Expandable folders expand_folders = request.user.folderstoexpand_set.all() if expand_folders: M.set_expand_list(*[f.folder_name for f in expand_folders]) # Read the subscribed folder list: M.refresh_folders(subscribed=True) # Get the default identity config = WebpymailConfig(request) identity_list = config.identities() default_address = identity_list[0]['mail_address'] return render_to_response('mail/folder_list.html', { 'server': M, 'address': default_address }, context_instance=RequestContext(request))
def get_msg_part(request, folder, uid, part_number, inline=False): '''Gets a message part. ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin(request) folder = M[folder_name] message = folder[int(uid)] part = message.bodystructure.find_part(part_number) response = HttpResponse(content_type='%s/%s' % (part.media, part.media_subtype)) if part.filename(): filename = part.filename() else: filename = _('Unknown') if inline: response['Content-Disposition'] = 'inline; filename=%s' % filename else: response['Content-Disposition'] = 'attachment; filename=%s' % filename if part.media.upper() == 'TEXT': response['Content-Type'] = '%s/%s; charset=%s' % ( part.media, part.media_subtype, part.charset()) else: response['Content-Type'] = '%s/%s' % (part.media, part.media_subtype) response.write(message.part(part)) response.close() return response
def imap_store(request, folder, message): ''' Stores a message on an IMAP folder. ''' M = serverLogin(request) folder = M[folder] folder.append(message.as_string())
def forward_message(request, folder, uid): '''Reply to a message''' # Get the message M = serverLogin( request ) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Create a temporary file fl = tempfile.mkstemp(suffix='.tmp', prefix='webpymail_', dir=settings.TEMPDIR) # Save message source to a file os.write( fl[0], message.source() ) os.close(fl[0]) # Add a entry to the Attachments table: attachment = Attachments( user = request.user, temp_file = fl[1], filename = 'attached_message', mime_type = 'MESSAGE/RFC822', sent = False ) attachment.save() # Gather some message info subject = _('Fwd: ') + message.envelope['env_subject'].decode('utf-8') return send_message( request, subject=subject, attachments='%d' % attachment.id)
def forward_message(request, folder, uid): '''Reply to a message''' # Get the message M = serverLogin(request) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Create a temporary file fl = tempfile.mkstemp(suffix='.tmp', prefix='webpymail_', dir=settings.TEMPDIR) # Save message source to a file os.write(fl[0], message.source()) os.close(fl[0]) # Add a entry to the Attachments table: attachment = Attachments(user=request.user, temp_file=fl[1], filename='attached_message', mime_type='MESSAGE/RFC822', sent=False) attachment.save() # Gather some message info subject = _('Fwd: ') + message.envelope['env_subject'].decode('utf-8') return send_message(request, subject=subject, attachments='%d' % attachment.id)
def imap_store( request, folder, message ): ''' Stores a message on an IMAP folder. ''' M = serverLogin( request ) folder = M[folder] folder.append(message.as_string())
def reply_all_message(request, folder, uid): '''Reply to a message''' # Get the message M = serverLogin( request ) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Extract the relevant headers to_addr = mail_addr_str(message.envelope['env_from'][0]) cc_addr = join_address_list(message.envelope['env_to']+ message.envelope['env_cc']) subject = _('Re: ') + message.envelope['env_subject'].decode('utf-8') # Extract the message text text = '' for part in message.bodystructure.serial_message(): if part.is_text() and part.test_plain(): text += message.part( part ) # Quote the message text = quote_wrap_lines(text) text = (mail_addr_name_str(message.envelope['env_from'][0]) + _(' wrote:\n') + text) # Invoque the compose message form return send_message( request, text=text, to_addr=to_addr, cc_addr=cc_addr, subject=subject)
def show_folders_view(request): '''Show the account folders. ''' # Login to the server: M = serverLogin( request ) # Special folders # TODO: will get this from the user config M.set_special_folders('INBOX', 'INBOX.Drafts', 'INBOX.Templates') # Expandable folders expand_folders = request.user.folderstoexpand_set.all() if expand_folders: M.set_expand_list(*[ f.folder_name for f in expand_folders ]) # Read the subscribed folder list: M.refresh_folders(subscribed=True) # Get the default identity config = WebpymailConfig( request ) identity_list = config.identities() default_address = identity_list[0]['mail_address'] return render_to_response('mail/folder_list.html', {'server': M, 'address': default_address }, context_instance=RequestContext(request))
def show_message(request, folder, uid): '''Show the message ''' config = WebpymailConfig(request) folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin(request) folder = M[folder_name] message = folder[int(uid)] # If it's a POST request if request.method == 'POST': try: msgactions.message_change(request, message) except hlimap.imapmessage.MessageNotFound: return redirect('message_list', folder=folder.url()) return render_to_response( 'mail/message_body.html', { 'folder': folder, 'message': message, 'inline_img': config.getboolean('message', 'show_images_inline') }, context_instance=RequestContext(request))
def show_message_list_view(request, folder=settings.DEFAULT_FOLDER): '''Show the selected Folder message list. ''' M = serverLogin(request) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message_list = folder.message_list # Set the search criteria: search_criteria = 'ALL' query = None flag = request.GET.get('flag', None) if flag: query = 'flag=%s' % flag search_criteria = 'KEYWORD %s' % flag message_list.set_search_expression(search_criteria) message_list.refresh_messages() # Message action form raw_message_list = [(uid, uid) for uid in message_list.flat_message_list] form = MessageActionForm(data={}, message_list=raw_message_list, server=M) # If it's a POST request if request.method == 'POST': msgactions.batch_change(request, folder, raw_message_list) # Pagination message_list.paginator.msg_per_page = 40 try: page = int(request.GET.get('page', 1)) except: page = request.GET.get('page', 1) if page == 'all': message_list.paginator.msg_per_page = -1 page = 1 message_list.paginator.current_page = page message_list.add_messages_range() # Get the default identity config = WebpymailConfig(request) identity_list = config.identities() default_address = identity_list[0]['mail_address'] # Show the message list return render_to_response('mail/message_list.html', { 'folder': folder, 'address': default_address, 'paginator': folder.paginator(), 'query': query, 'form': form }, context_instance=RequestContext(request))
def show_message_list_view(request, folder=settings.DEFAULT_FOLDER): '''Show the selected Folder message list. ''' M = serverLogin( request ) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message_list = folder.message_list # Set the search criteria: search_criteria = 'ALL' query = None flag = request.GET.get('flag', None) if flag: query = 'flag=%s' % flag search_criteria = 'KEYWORD %s' % flag message_list.set_search_expression(search_criteria) message_list.refresh_messages() # Message action form raw_message_list = [ (uid,uid) for uid in message_list.flat_message_list ] form = MessageActionForm(data={}, message_list=raw_message_list, server=M) # If it's a POST request if request.method == 'POST': msgactions.batch_change( request, folder, raw_message_list ) # Pagination message_list.paginator.msg_per_page = 40 try: page = int(request.GET.get('page',1)) except: page = request.GET.get('page',1) if page == 'all': message_list.paginator.msg_per_page = -1 page = 1 message_list.paginator.current_page = page message_list.add_messages_range() # Get the default identity config = WebpymailConfig( request ) identity_list = config.identities() default_address = identity_list[0]['mail_address'] # Show the message list return render_to_response( 'mail/message_list.html',{ 'folder':folder, 'address': default_address, 'paginator': folder.paginator(), 'query':query, 'form':form }, context_instance=RequestContext(request))
def message_structure( request, folder, uid ): '''Show the message header ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin( request ) folder = M[folder_name] message = folder[int(uid)] return render_to_response('mail/message_structure.html',{'folder':folder, 'message':message}, context_instance=RequestContext(request))
def message_structure(request, folder, uid): '''Show the message header ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin(request) folder = M[folder_name] message = folder[int(uid)] return render_to_response('mail/message_structure.html', { 'folder': folder, 'message': message }, context_instance=RequestContext(request))
def message_source( request, folder, uid ): '''Show the message header ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin( request ) folder = M[folder_name] message = folder[int(uid)] # Assume that we have a single byte encoded string, this is because there # can be several different files with different encodings within the same # message. source = unicode(message.source(),'ISO-8859-1') return render_to_response('mail/message_source.html',{'folder':folder, 'message':message, 'source': source }, context_instance=RequestContext(request))
def message_source(request, folder, uid): '''Show the message header ''' folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin(request) folder = M[folder_name] message = folder[int(uid)] # Assume that we have a single byte encoded string, this is because there # can be several different files with different encodings within the same # message. source = unicode(message.source(), 'ISO-8859-1') return render_to_response('mail/message_source.html', { 'folder': folder, 'message': message, 'source': source }, context_instance=RequestContext(request))
def show_message(request, folder, uid): '''Show the message ''' config = WebpymailConfig( request ) folder_name = base64.urlsafe_b64decode(str(folder)) M = serverLogin( request ) folder = M[folder_name] message = folder[int(uid)] # If it's a POST request if request.method == 'POST': try: msgactions.message_change( request, message ) except hlimap.imapmessage.MessageNotFound: return redirect('message_list', folder=folder.url() ) return render_to_response('mail/message_body.html',{'folder':folder, 'message':message, 'inline_img': config.getboolean('message', 'show_images_inline')}, context_instance=RequestContext(request))
def forward_message_inline(request, folder, uid): '''Reply to a message''' def message_header(message): text = '' text += show_addrs(_('From'), message.envelope['env_from'], _('Unknown')) text += show_addrs(_('To'), message.envelope['env_to'], _('-')) text += show_addrs(_('Cc'), message.envelope['env_cc'], _('-')) text += _('Date: ') + message.envelope['env_date'].strftime( '%Y-%m-%d %H:%M') + '\n' text += _('Subject: ') + message.envelope['env_subject'].decode( 'utf-8') + '\n\n' return text # Get the message M = serverLogin(request) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Extract the message text text = '' text += '\n\n' + _('Forwarded Message').center(40, '-') + '\n' text += message_header(message) for part in message.bodystructure.serial_message(): if part.is_text() and part.test_plain() and not part.is_attachment(): text += message.part(part) if part.is_encapsulated(): if part.is_start(): text += '\n\n' + _('Encapsuplated Message').center(40, '-') + '\n' text += message_header(part) else: text += '\n' + _('End Encapsuplated Message').center( 40, '-') + '\n' text += '\n' + _('End Forwarded Message').center(40, '-') + '\n' # Extract the message attachments attach_list = [] for part in message.bodystructure.serial_message(): if part.is_attachment() and not part.is_encapsulated(): # Create a temporary file fl = tempfile.mkstemp(suffix='.tmp', prefix='webpymail_', dir=settings.TEMPDIR) # Save message source to a file os.write(fl[0], message.part(part, decode_text=False)) os.close(fl[0]) # Add a entry to the Attachments table: attachment = Attachments( user=request.user, temp_file=fl[1], filename=part.filename() if part.filename() else _('Unknown'), mime_type='%s/%s' % (part.media, part.media_subtype), content_desc=part.body_fld_desc if part.body_fld_desc else '', content_id=part.body_fld_id if part.body_fld_id else '', show_inline=False if part.body_fld_dsp[0].upper() == 'ATTACHMENT' else True, sent=False) attachment.save() attach_list.append(attachment.id) # Gather some message info subject = _('Fwd: ') + message.envelope['env_subject'].decode('utf-8') return send_message(request, subject=subject, text=text, attachments=','.join(['%d' % Xi for Xi in attach_list]))
def forward_message_inline(request, folder, uid): '''Reply to a message''' def message_header( message ): text = '' text += show_addrs( _('From'), message.envelope['env_from'], _('Unknown') ) text += show_addrs( _('To'), message.envelope['env_to'], _('-') ) text += show_addrs( _('Cc'), message.envelope['env_cc'], _('-') ) text += _('Date: ') + message.envelope['env_date'].strftime('%Y-%m-%d %H:%M') + '\n' text += _('Subject: ') + message.envelope['env_subject'].decode('utf-8') + '\n\n' return text # Get the message M = serverLogin( request ) folder_name = base64.urlsafe_b64decode(str(folder)) folder = M[folder_name] message = folder[int(uid)] # Extract the message text text = '' text += '\n\n' + _('Forwarded Message').center(40,'-') + '\n' text += message_header( message ) for part in message.bodystructure.serial_message(): if part.is_text() and part.test_plain() and not part.is_attachment(): text += message.part( part ) if part.is_encapsulated(): if part.is_start(): text += '\n\n' + _('Encapsuplated Message').center(40,'-') + '\n' text += message_header( part ) else: text += '\n' + _('End Encapsuplated Message').center(40,'-') + '\n' text += '\n' + _('End Forwarded Message').center(40,'-') + '\n' # Extract the message attachments attach_list = [] for part in message.bodystructure.serial_message(): if part.is_attachment() and not part.is_encapsulated(): # Create a temporary file fl = tempfile.mkstemp(suffix='.tmp', prefix='webpymail_', dir=settings.TEMPDIR) # Save message source to a file os.write( fl[0], message.part(part, decode_text = False) ) os.close(fl[0]) # Add a entry to the Attachments table: attachment = Attachments( user = request.user, temp_file = fl[1], filename = part.filename() if part.filename() else _('Unknown'), mime_type = '%s/%s' % (part.media, part.media_subtype), content_desc = part.body_fld_desc if part.body_fld_desc else '', content_id = part.body_fld_id if part.body_fld_id else '', show_inline = False if part.body_fld_dsp[0].upper() == 'ATTACHMENT' else True, sent = False ) attachment.save() attach_list.append(attachment.id) # Gather some message info subject = _('Fwd: ') + message.envelope['env_subject'].decode('utf-8') return send_message( request, subject=subject, text = text, attachments=','.join([ '%d' % Xi for Xi in attach_list ]) )