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_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_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_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 not_implemented(request): return render_to_response('mail/not_implemented.html', context_instance=RequestContext(request))
def send_message(request, text='', to_addr='', cc_addr='', bcc_addr = '', subject='', attachments=''): '''Generic send message view ''' if request.method == 'POST': new_data = request.POST.copy() other_action = False old_files = [] if new_data.has_key('saved_files'): if new_data['saved_files']: old_files = new_data['saved_files'].split(',') uploaded_files = UploadFiles( request.user, old_files = old_files, new_files = request.FILES.getlist('attachment[]')) # Check if there is a request to delete files for key in new_data: match = delete_re.match(key) if match: id = int(match.groups()[0]) uploaded_files.delete_id(id) other_action = True # Check if the cancel button was pressed if new_data.has_key('cancel'): # Delete the files uploaded_files.delete() # return return HttpResponseRedirect('/') # create an hidden field with the file list. # In case the form does not validate, the user doesn't have # to upload it again new_data['saved_files'] = ','.join([ '%d' % Xi for Xi in uploaded_files.id_list()]) user_profile = request.user.get_profile() form = ComposeMailForm(new_data, request = request) if new_data.has_key('upload'): other_action = True if form.is_valid() and not other_action: # get the data: form_data = form.cleaned_data subject = form_data['subject'] from_addr = form_data['from_addr'] to_addr = join_address_list( form_data['to_addr'] ) cc_addr = join_address_list( form_data['cc_addr'] ) bcc_addr = join_address_list( form_data['bcc_addr'] ) text_format = form_data['text_format'] message_text = form_data['message_text'].encode('utf-8') config = WebpymailConfig( request ) if text_format == MARKDOWN and HAS_MARKDOWN: md = markdown.Markdown(output_format='HTML') message_html = md.convert(smart_unicode(message_text)) css = config.get('message', 'css') # TODO: use a template to get the html and insert the css message_html = '<html>\n<style>%s</style><body>\n%s\n</body>\n</html>' % (css, message_html) else: message_html = None message = compose_rfc822( from_addr, to_addr, cc_addr, bcc_addr, subject, message_text, message_html, uploaded_files ) try: host = config.get('smtp', 'host') port = config.getint('smtp', 'port') user = config.get('smtp', 'user') passwd = config.get('smtp', 'passwd') security = config.get('smtp', 'security').upper() use_imap_auth = config.getboolean('smtp', 'use_imap_auth') if use_imap_auth: user = request.session['username'] passwd = request.session['password'] send_mail( message, host, port, user, passwd, security) except SMTPRecipientsRefused, detail: error_message = ''.join( ['<p>%s' % escape(detail.recipients[Xi][1]) for Xi in detail.recipients ] ) return render_to_response('mail/send_message.html', {'form':form, 'server_error': error_message, 'uploaded_files': uploaded_files}, context_instance=RequestContext(request)) except SMTPException, detail: return render_to_response('mail/send_message.html', {'form':form, 'server_error': '<p>%s' % detail, 'uploaded_files': uploaded_files}, context_instance=RequestContext(request)) except Exception, detail: error_message = '<p>%s' % detail return render_to_response('mail/send_message.html', {'form':form, 'server_error': error_message, 'uploaded_files': uploaded_files}, context_instance=RequestContext(request))
error_message = '<p>%s' % detail return render_to_response('mail/send_message.html', {'form':form, 'server_error': error_message, 'uploaded_files': uploaded_files}, context_instance=RequestContext(request)) # Store the message on the sent folder imap_store( request,user_profile.sent_folder, message ) # Delete the temporary files uploaded_files.delete() return HttpResponseRedirect('/') else: return render_to_response('mail/send_message.html', {'form':form, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request)) else: initial= { 'text_format': 1, 'message_text': text, 'to_addr': to_addr, 'cc_addr': cc_addr, 'bcc_addr': bcc_addr, 'subject': subject, 'saved_files': attachments } if attachments: uploaded_files = UploadFiles( request.user, old_files = attachments.split(',') ) else:
def send_message(request, text='', to_addr='', cc_addr='', bcc_addr='', subject='', attachments=''): '''Generic send message view ''' if request.method == 'POST': new_data = request.POST.copy() other_action = False old_files = [] if new_data.has_key('saved_files'): if new_data['saved_files']: old_files = new_data['saved_files'].split(',') uploaded_files = UploadFiles( request.user, old_files=old_files, new_files=request.FILES.getlist('attachment[]')) # Check if there is a request to delete files for key in new_data: match = delete_re.match(key) if match: id = int(match.groups()[0]) uploaded_files.delete_id(id) other_action = True # Check if the cancel button was pressed if new_data.has_key('cancel'): # Delete the files uploaded_files.delete() # return return HttpResponseRedirect('/') # create an hidden field with the file list. # In case the form does not validate, the user doesn't have # to upload it again new_data['saved_files'] = ','.join( ['%d' % Xi for Xi in uploaded_files.id_list()]) user_profile = request.user.get_profile() form = ComposeMailForm(new_data, request=request) if new_data.has_key('upload'): other_action = True if form.is_valid() and not other_action: # get the data: form_data = form.cleaned_data subject = form_data['subject'] from_addr = form_data['from_addr'] to_addr = join_address_list(form_data['to_addr']) cc_addr = join_address_list(form_data['cc_addr']) bcc_addr = join_address_list(form_data['bcc_addr']) text_format = form_data['text_format'] message_text = form_data['message_text'].encode('utf-8') config = WebpymailConfig(request) if text_format == MARKDOWN and HAS_MARKDOWN: md = markdown.Markdown(output_format='HTML') message_html = md.convert(smart_unicode(message_text)) css = config.get('message', 'css') # TODO: use a template to get the html and insert the css message_html = '<html>\n<style>%s</style><body>\n%s\n</body>\n</html>' % ( css, message_html) else: message_html = None message = compose_rfc822(from_addr, to_addr, cc_addr, bcc_addr, subject, message_text, message_html, uploaded_files) try: host = config.get('smtp', 'host') port = config.getint('smtp', 'port') user = config.get('smtp', 'user') passwd = config.get('smtp', 'passwd') security = config.get('smtp', 'security').upper() use_imap_auth = config.getboolean('smtp', 'use_imap_auth') if use_imap_auth: user = request.session['username'] passwd = request.session['password'] send_mail(message, host, port, user, passwd, security) except SMTPRecipientsRefused, detail: error_message = ''.join([ '<p>%s' % escape(detail.recipients[Xi][1]) for Xi in detail.recipients ]) return render_to_response( 'mail/send_message.html', { 'form': form, 'server_error': error_message, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request)) except SMTPException, detail: return render_to_response( 'mail/send_message.html', { 'form': form, 'server_error': '<p>%s' % detail, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request)) except Exception, detail: error_message = '<p>%s' % detail return render_to_response( 'mail/send_message.html', { 'form': form, 'server_error': error_message, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request))
'server_error': error_message, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request)) # Store the message on the sent folder imap_store(request, user_profile.sent_folder, message) # Delete the temporary files uploaded_files.delete() return HttpResponseRedirect('/') else: return render_to_response('mail/send_message.html', { 'form': form, 'uploaded_files': uploaded_files }, context_instance=RequestContext(request)) else: initial = { 'text_format': 1, 'message_text': text, 'to_addr': to_addr, 'cc_addr': cc_addr, 'bcc_addr': bcc_addr, 'subject': subject, 'saved_files': attachments } if attachments: