Giter Site home page Giter Site logo

modoboa / modoboa Goto Github PK

View Code? Open in Web Editor NEW
2.9K 89.0 381.0 29.71 MB

Mail hosting made simple

Home Page: https://modoboa.org

License: ISC License

Python 72.59% Smarty 0.54% JavaScript 8.36% HTML 4.99% CSS 0.49% Shell 0.03% Vue 12.99% SCSS 0.01%
python javascript email django jquery postfix dovecot hosting modoboa python3 vuejs

modoboa's Introduction

Modoboa (website)

workflow codecov Latest version on Pypi

Modoboa is a mail hosting and management platform including a modern and simplified Web User Interface. It provides useful components such as an administration panel and webmail.

Modoboa integrates with well known software such as Postfix or Dovecot. A SQL database (MySQL, PostgreSQL or SQLite) is used as a central point of communication between all components.

Modoboa is developed with modularity in mind, expanding it is really easy. Actually, all current features are extensions.

It is written in Python 3 and uses the Django, jQuery and Bootstrap frameworks.

Main features

Documentation

A detailed documentation will help you to install, use or extend Modoboa.

Demo Installation

If you want to try out Modoboa, check out our demo installation.

Getting help

Modoboa is a free software and is totally open source BUT you can hire the team if you need professional services. More information here: https://modoboa.org/en/professional-services/.

Contracting a support plan if a good way to ensure your installation stays available and up-to-date and it will help the project to be sustainable :)

Community

If you have any questions, you can get help through the following platforms:

  • Discord
  • Github: open an issue if you found a bug

External code

The following external libraries are provided with Modoboa:

modoboa's People

Contributors

akshatsoni64 avatar arthru avatar arvedui avatar azazel75 avatar carragom avatar christianwgd avatar clemriviere avatar dependabot-preview[bot] avatar dependabot[bot] avatar disko avatar fpoulain avatar gawel avatar jeromelebleu avatar jjasonkal avatar jpcaruana avatar kryskool avatar ksaadde avatar kunago avatar lddubeau avatar ntninja avatar patrickbenkoetter avatar simonkern avatar spitfireap avatar stephane-klein avatar telskamp avatar toc-toc avatar toniob avatar tonioo avatar transifex-integration[bot] avatar whyscream avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

modoboa's Issues

Multiple bugs with emails selection

Originally created by Antoine Nguyen on 2010-04-29T16:15:28Z

When emails are selected, dragged and not dropped (ie. action is cancelled), some emails disappear if you click on them!

There is also a problem with the 'select all' checkbox. I think the thead raw is counted like a normal raw when dragging the selection... (the messages count is not correct).

Actions like move or mark are not working if all emails are selected.

[amavis_quarantine] Finish the email viewer menu

Originally created by Antoine Nguyen on 2009-07-03T15:43:46Z

Actually, 'remove' and 'release' buttons are inactive. A modification is necessary inside the controller in order to split tasks done by the 'process' function into multiple functions. Then it will be easy to link buttons with those actions.

Find a better way for plugins' static files

Originally created by Antoine Nguyen on 2009-07-03T16:03:56Z

Actually, all CSS/Javascript customization needed by plugins is contained inside template files. Find a way to externalize this code inside specific files (like core static content).

Make quotas defined inside the admin component available to external products

Originally created by Antoine Nguyen on 2009-04-02T08:48:28Z

Actually, quotas defined with the admin component are useless. I think each external product have a different way of managing FS quotas. For example, there is a specific plugin into Dovecot. It could be interesting to think about a first plugin engine for [[MailNG]]...

Create a webmail extension

Originally created by Antoine Nguyen on 2009-11-06T09:08:57Z

Add a simple webmail component with following functionalities:

  • Emails viewing (already available inside amavis_quarantine),
  • Emails writing/sending : we need to find an existing HTML editor component (in python? javascript?)
  • Emails classification and so subfolders support : view subfolders, create/delete, etc.

This is a huge extension, it needs more specifications.

[amavis_quarantine] DB cleaning script

Originally created by Antoine Nguyen on 2009-07-03T15:49:11Z

Add a new script that will be run by the cron daemon daily to check for old/bad messages. Those messages will be removed from the quarantine. I think 2 weeks is a good lifetime for each message and there are some explanations inside Amavisd documentation that describes in which situations messages can be removed.

[amavis_quarantine] Add a search engine

Originally created by Antoine Nguyen on 2009-07-03T15:55:26Z

A simple tool that will allow to look for messages inside the database. Patterns could concern subject, addresses (from, to)...

[webmail] ability to sort emails

Originally created by Antoine Nguyen on 2010-01-20T16:11:43Z

In the emails listing, we need the possibility to sort emails (on date/sender/etc.) by clicking on columns.

The IMAP protocol provides a way to filter searchs.

Bad call of domain_menu in aliases

Originally created by Antoine Nguyen on 2009-04-29T09:13:53Z

Template error:
In template /var/www/jonathan/django.dev.harrycow.fr/mailng/templates/admin/aliases.html, error at line 4
domain_menu takes 3 arguments
1 : {% extends "admin/domain_header.html" %}
2 : {% block menu %}
3 : {% load admin_extras %}
4 : {% domain_menu domain.id "aliases" %}
5 : {% endblock %}
6 :
7 : {% block domcontent %}
8 : {% load i18n %}
9 : {% if not aliases %}
10 :

{% trans "No alias defined." %}


11 : {% else %}
12 :
13 :
14 :

Traceback:
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response

  1.             response = callback(request, _callback_args, *_callback_kwargs)
    
    File "/usr/lib/python2.5/site-packages/django/contrib/auth/decorators.py" in +call+
  2.         return self.view_func(request, _args, *_kwargs)
    
    File "/var/www/jonathan/django.dev.harrycow.fr/mailng/admin/views.py" in aliases
  3.         "aliases" : aliases, "domain" : domain
    
    File "/var/www/jonathan/django.dev.harrycow.fr/mailng/admin/views.py" in _render
  4. context_instance=RequestContext(request))
    File "/usr/lib/python2.5/site-packages/django/shortcuts/+init+.py" in render_to_response
  5. return [[HttpResponse]](loader.render_to_string%28*args, **kwargs%29, **httpresponse_kwargs)
    
    File "/usr/lib/python2.5/site-packages/django/template/loader.py" in render_to_string
  6.     t = get_template(template_name)
    
    File "/usr/lib/python2.5/site-packages/django/template/loader.py" in get_template
  7. template = get_template_from_string(source, origin, template_name)
    
    File "/usr/lib/python2.5/site-packages/django/template/loader.py" in get_template_from_string
  8. return Template(source, origin, name)
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in +init+
  9.     self.nodelist = compile_string(template_string, origin)
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in compile_string
  10. return parser.parse()
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in parse
  11.                 compiled_result = compile_func(self, token)
    
    File "/usr/lib/python2.5/site-packages/django/template/loader_tags.py" in do_extends
  12. nodelist = parser.parse()
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in parse
  13.                 compiled_result = compile_func(self, token)
    
    File "/usr/lib/python2.5/site-packages/django/template/loader_tags.py" in do_block
  14. nodelist = parser.parse(('endblock', 'endblock %s' % block_name))
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in parse
  15.                 compiled_result = compile_func(self, token)
    
    File "/usr/lib/python2.5/site-packages/django/utils/functional.py" in _curried
  16.     return _curried_func(_(args+moreargs), *_dict(kwargs, **morekwargs))
    
    File "/usr/lib/python2.5/site-packages/django/template/+init+.py" in generic_tag_compiler
  17.     raise [[TemplateSyntaxError]](message) 
    
{% trans "Actions" %}

Add per user whitelist/blacklist support

Originally created by Antoine Nguyen on 2009-11-06T08:22:26Z

As for quarantine, Amavisd-new allows users to define personnal whitelists/blacklists in an SQL database.

Create a new extension (or modify the existing quarantine extension) to handle this.

Additional specs are needed.

'mbox' mailboxes format support

Originally created by Antoine Nguyen on 2009-06-09T13:11:55Z

As suggested by Jonathan L., it would be usefull to support the 'mbox' format when adding mailboxes with [[MailNG]].

External authentication support

Originally created by Antoine Nguyen on 2009-11-06T08:57:51Z

[[MailNG]] must be able to authenticate against an external component such as an LDAP directory.

I think the Django's authentication API already provides this kind of functionality.

Bad behaviour when no plugin activated

Originally created by Anonymous on 2009-09-17T09:20:59Z

Traceback (most recent call last):

File "/Library/Python/2.5/site-packages/django/core/servers/basehttp.py", line 278, in run
self.result = application(self.environ, self.start_response)

File "/Library/Python/2.5/site-packages/django/core/servers/basehttp.py", line 635, in +call+
return self.application(environ, start_response)

File "/Library/Python/2.5/site-packages/django/core/handlers/wsgi.py", line 239, in +call+
response = self.get_response(request)

File "/Library/Python/2.5/site-packages/django/core/handlers/base.py", line 67, in get_response
response = middleware_method(request)

File "/Library/Python/2.5/site-packages/django/middleware/common.py", line 56, in process_request
if (not _is_valid_path(request.path_info) and

File "/Library/Python/2.5/site-packages/django/middleware/common.py", line 142, in _is_valid_path
urlresolvers.resolve(path)

File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 246, in resolve
return get_resolver(urlconf).resolve(path)

File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 179, in resolve
for pattern in self.urlconf_module.urlpatterns:

File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 198, in _get_urlconf_module
self.urlconf_module = +import+(self.urlconf_name, {}, {}, [])

File "/Users/jonathan/Web/mailng/mailng/../mailng/urls.py", line 29, in
urlpatterns += patterns(_, loadmenus())

File "/Library/Python/2.5/site-packages/django/conf/urls/defaults.py", line 15, in patterns
t = url(prefix=prefix, *t)

[[TypeError]]: url() takes at least 2 non-keyword arguments (0 given)

Vacation message support

Originally created by Antoine Nguyen on 2009-04-17T07:16:11Z

Allow users to define/activate a vacation message while they are absent. For a beginning, just implement this function with manual interactions. After, it will be usefull to be able to planify the end date.

[statistics] selector issue from admin menu

Originally created by Florent Dionisi on 2009-11-27T16:15:15Z

From statistic page (admin menu).
When selecting new period of stats, the domain selected changes from X to "global".
=> one could expect the domain to remain the same while changing the period.

Same issue when selecting another domain, the period change from X to day!!

Basic permissions support

Originally created by Antoine Nguyen on 2009-04-02T08:45:31Z

Implement a basic permissions/role support. It would be great to have following roles available :

  • Super admin : can do anything,
  • Domain(s) admin : can do anything on owned domains,
  • Simple user : actually useless but needed for futures developements.

Django has a functionnal permissions implementation inside the authentication module (already used).

[postfix_autoreply] plugin conversion

Originally created by Antoine Nguyen on 2009-10-27T16:43:54Z

Try to convert this pseudo plugin into a real plugin :

  1. Move views/models/forms outside main/

Find a way to handle config parameters directly in database

Originally created by Antoine Nguyen on 2009-11-06T08:44:53Z

Actually, all the configuration is done by modifying the settings.py file. It would be easier to modify parameters via the interface.

It's necessary to provide a way of integration for extensions. An additionnal component must be able to define its own parameters (like now with settings.py).

Improve nested folders support

Originally created by Antoine Nguyen on 2010-01-20T16:20:43Z

Actually it is not possible to browse nested folders. We need to implement a tree view to display the folders hierachy.

[webmail] ability to move emails

Originally created by Antoine Nguyen on 2010-01-20T16:18:37Z

Add a drag&drop functionnaly to move one or more emails from one folder to another.

Note : we need to handle emails marked as '\Deleted'

[webmail] ability to delete emails

Originally created by Antoine Nguyen on 2010-01-20T16:16:41Z

There are many ways of deleting an email:

  • Select an email, display it and click on the 'Delete' button
  • Select an email an drag it inside a Trash folder

When browsing the Trash folder, there will be a special button to flush its content definitively.

Note : do not forget the EXPUNGE command.

Mailbox password cannot be updated

Originally created by Antoine Nguyen on 2010-04-12T07:28:27Z

From the admin view, password modification on a mailbox is not effective.

Plugins management page

Originally created by Antoine Nguyen on 2010-04-22T20:41:53Z

Add a new page that will allow administrators to activate/deactivate plugins. To activate a plugin, we need to modify the settings.py (INSTALLED_APPS) and to create a link to the plugin templates directory inside the main templates directory... or to modify the appropriate variable inside the config file.

[webmail] settings

Originally created by Antoine Nguyen on 2010-01-20T16:29:46Z

We miss some parameters to configure properly this plugin :

  • Choose between CLEAR or SSL mode,
  • Specify a specific TCP port,
  • Add parameters to contact an SMTP server (think about SSL too)
  • Handle different types of authentication (both SMTP and IMAP)
  • etc.

Exim support

Originally created by Florent Dionisi on 2009-11-06T17:02:51Z

Implement specific SQL lookups for Exim. see [http://www.exim.org/exim-html-current/doc/html/spec_html/index.html#toc0109]

[general] Add a notification area inside the main layout

Originally created by Antoine Nguyen on 2009-10-22T16:28:02Z

The idea is to display status messages (ok, error, ...) returned by administration actions (add/delete/modify).

This area could be located to the right of the title (inside middle div), on the same line.

Error with mailbox name

Originally created by Antoine Nguyen on 2009-05-31T20:26:20Z

Mailbox creation or modification fails if the name field contains only one word.

Traceback:
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response

  1.             response = callback(request, _callback_args, *_callback_kwargs)
    
    File "/usr/lib/python2.5/site-packages/django/contrib/auth/decorators.py" in +call+
  2.         return self.view_func(request, _args, *_kwargs)
    
    File "/var/www/users/www-data/mailng/admin/views.py" in newmailbox
  3.                 fname, lname = mb.name.split()
    
    Exception Type: [[ValueError]] at /mailng/admin/domains/2/newmailbox/
    Exception Value: need more than 1 value to unpack

UID and GID are always fixed to 500

Originally created by Antoine Nguyen on 2010-04-12T07:03:29Z

Reported by Myrdhin on the list :

When i create a new mailbox, UID and GID in database are always set to
500...

I think UID and GID of the mailbox in database should be set to
VIRTUAL_UID and VIRTUAL_GID to work correctly with maildir folder
owned by virtual user/group (like vmail).

Improve parser performance

Originally created by Antoine Nguyen on 2009-11-06T11:02:11Z

We need to define a better parser structure:

  • Don't parse already handled lines (based on the date)

Handle attached files

Originally created by Antoine Nguyen on 2010-01-20T16:26:34Z

Actually, attached files are discarded. We need to:

  • add a special icon in listing when an email owns attached files,
  • add links to download files when displaying an email,
  • add the possibility to attach files when composing an email.

[statistics] Add a period selector when displaying graphics

Originally created by Antoine Nguyen on 2009-11-06T08:18:33Z

Actually, it is not possible to select a custom display period for statistics. (like last hours or 2 last weeks)

We need a simple selector (start and end date for example) that will be included inside existent pages.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.