Go to file
Ilias Tsitsimpis e8b79c6bff Import ui before threadutil to resolve circular dependency
The `threadutil` module depends on the `ui` module, which cycle depends
on `threadutil` through the `Curses` module.

The `ui` module had been loaded before the `threadutil` module, breaking
the above circular dependency, but this was changed in a recent code
refactoring, preventing the `Curses` module from being loaded with the
following exception:

  File "./offlineimap.py", line 23, in <module>
    from offlineimap import OfflineImap
  File "offlineimap/offlineimap/__init__.py", line 20, in <module>
    from offlineimap.init import OfflineImap
  File "offlineimap/offlineimap/init.py", line 30, in <module>
    from offlineimap import globals, threadutil, accounts, folder, mbnames
  File "offlineimap/offlineimap/threadutil.py", line 25, in <module>
    from offlineimap.ui import getglobalui
  File "offlineimap/offlineimap/ui/__init__.py", line 28, in <module>
    from offlineimap.ui import Curses
  File "offlineimap/offlineimap/ui/Curses.py", line 27, in <module>
    from offlineimap.threadutil import ExitNotifyThread
ImportError: cannot import name ExitNotifyThread

Fix the above error by ensuring that the `ui` module gets loaded before
the `threadutil` module. Please note that the above fix is temporary,
and we should refactor the modules to not have circular dependencies.

Bug-Debian: https://bugs.debian.org/839862
Reported-by: Neil McGovern <neilm@debian.org>
Signed-off-by: Ilias Tsitsimpis <i.tsitsimpis@gmail.com>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2016-10-07 08:47:21 +02:00
.github github template: add system/distribution 2016-07-28 18:47:36 +02:00
bin Convert to use OptionParser for command line handling. 2010-12-15 20:02:27 +01:00
contrib introduce contrib/README.md 2016-09-25 01:46:20 +02:00
docs website-doc.sh: print usage when no argument is given 2016-09-21 04:11:17 +02:00
offlineimap Import ui before threadutil to resolve circular dependency 2016-10-07 08:47:21 +02:00
scripts DNS of the website changed, reflect it 2015-03-21 13:40:06 +01:00
test Change filter with lambda to list comprehension 2016-05-10 02:53:09 +02:00
.gitignore Add tags to gitignore 2016-05-05 23:50:24 +02:00
Changelog.maint.md v6.7.0.3 2016-07-26 08:46:22 +02:00
Changelog.md Changelog: add remark about singlethreadperfolder in the resume 2016-09-21 04:07:17 +02:00
CODE_OF_CONDUCT.md code of conduct: try to clarify what item 3 might mean 2016-07-12 16:04:55 +02:00
CONTRIBUTING.rst explain how to submit issues in more files 2016-09-09 21:10:30 +02:00
COPYING COPYING: fix unexpected characters 2015-01-15 11:41:35 +01:00
MAINTAINERS.rst MAINTAINERS: update 2016-02-27 20:10:34 +01:00
Makefile Really execute the recipe of the 'docs' target in top-most Makefile 2016-03-21 18:41:41 +01:00
MANIFEST.in MANIFEST: exclude rfcs 2016-02-27 05:25:09 +01:00
offlineimap.conf set singlethreadperfolder configuration option when in idle mode 2016-09-20 02:36:56 +02:00
offlineimap.conf.minimal Improve nametrans user documentation 2012-02-13 16:09:32 +01:00
offlineimap.py allow to run under python3 without special env 2016-06-03 19:59:56 +02:00
README.md README: minor copy edits 2016-09-14 22:02:16 +02:00
requirements.txt move requirements.txt to the root directory 2016-06-07 17:05:31 +02:00
setup.cfg pypi requires a setup.cfg when README is Markdown 2016-02-27 05:34:46 +01:00
setup.py Add offlineimap.utils to the list of our modules 2013-02-05 07:38:11 +04:00
TODO.rst update TODO.rst 2015-11-23 02:24:33 +01:00

OfflineIMAP

"Get the emails where you need them."

Official offlineimap.

Description

OfflineIMAP is software that downloads your email mailbox(es) as local Maildirs. OfflineIMAP will synchronize both sides via IMAP.

IMAP's main downside is that you have to trust your email provider to not lose your email. While certainly unlikely, it's not impossible. With OfflineIMAP, you can download your Mailboxes and make you own backups of your Maildir.

This allows reading your email offline without the need for your mail reader (MUA) to support IMAP operations. Need an attachment from a message without internet connection? No problem, the message is still there.

Project status and future

As one of the maintainer of OfflineIMAP, I'd like to put my efforts into imapfw. imapfw is software in development that I intend to replace OfflineIMAP with in the long term.

That's why I'm not going to continue OfflineIMAP development. I'll continue to maintain OfflineIMAP (fixing small bugs, reviewing patches and merging, and rolling out new releases), but that's all.

While I keep tracking issues for OfflineIMAP, you should not expect future support.

You won't be left at the side. OfflineIMAP's community is large enough so that you'll find people for most of your issues.

Get news from the blog.

                             Nicolas Sebrecht. ,-)

License

GNU General Public License v2.

Why should I use OfflineIMAP?

  • It is fast.
  • It is reliable.
  • It is flexible.
  • It is safe.

Downloads

You should first check if your distribution already packages OfflineIMAP for you. Downloads releases as tarball or zipball.

Feedbacks and contributions

The user discussions, development, announcements and all the exciting stuff take place on the mailing list. While not mandatory to send emails, you can subscribe here.

Bugs, issues and contributions can be requested to both the mailing list or the official Github project. Provide the following information:

  • system/distribution (with version)
  • offlineimap version (offlineimap -V)
  • Python version
  • server name or domain
  • CLI options
  • Configuration file (offlineimaprc)
  • pythonfile (if any)
  • Logs, error
  • Steps to reproduce the error

The community

Requirements & dependencies

  • Python v2.7+
  • Python v3.4+ (experimental: see known issues)
  • six (required)
  • imaplib2 >= 2.55 (optional)

Documentation

All current and updated documentation is on the community's website.

Read documentation locally

You might want to read the documentation locally. Get the sources of the website. For the other documentation, run the appropriate make target:

$ ./scripts/get-repository.sh website
$ cd docs
$ make html  # Requires rst2html
$ make man   # Requires a2x (http://asciidoc.org)
$ make api   # Requires sphinx