Compare commits

...

22 Commits

Author SHA1 Message Date
Chris Coleman ffbace51a2
Update BACKERS.md 2023-03-30 07:19:04 -04:00
Chris Coleman 7eacce1f58
Update BACKERS.md
Add logo (in feature branch of website, pending merge) with link to sponsor website!
2023-03-29 07:00:35 -04:00
Chris Coleman 87b04f0f54
Update BACKERS.md 2023-03-29 04:39:47 -04:00
Chris Coleman 8bd94ee8bc
Create BACKERS.md
Work in Progress. 
For all Bronze and Silver Sponsors, this page is supposed to show sponsoring company logo and link to sponsoring company website, also for Silver, same on sponsors page of our website.
Gold and Platinum go in `README.md` and on front page of our website.
2023-03-29 04:35:40 -04:00
Nicolas Sebrecht e70d3992a0 README: rewording and typo fix
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2021-08-03 01:24:07 +02:00
Nicolas Sebrecht 99a7f74805 Changelog: fix version
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2021-08-03 01:12:52 +02:00
Nicolas Sebrecht 6e837c614d v7.3.4
Tested-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2021-08-03 01:07:23 +02:00
Nicolas Sebrecht 1953001196 Merge remote-tracking branch 'OfflineIMAP/master' into next 2021-08-03 01:06:07 +02:00
Nicolas Sebrecht a4ee6675ce redirect the users to offlineimap3
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2021-08-03 00:55:07 +02:00
Nicolas Sebrecht a2a92e7433 remove outdated links to travis
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2021-08-03 00:54:44 +02:00
Nicolas Sebrecht feec770809
Merge pull request #698 from cathalgarvey/patch-1
Lack of Python 3 support needs to be more clear..
2021-07-29 01:24:24 +02:00
Cathal Garvey 069c05a0c2
Lack of Python 3 support needs to be more clear..
I saw the top line, and the requirement for `six`, and took that to mean that Python 3 was supported. After wasting some of my time setting up and dealing with opaque bugs, I discovered that Python 3 is not supported after all.

"2.7+" implies modernity, so I'm suggesting we substitute "2.7.x" to be explicit that this is Python 2 only, and strike through the Python 3 line to be blunt that it is not working.
2021-05-18 13:07:55 +01:00
Nicolas Sebrecht 2d0d07cd6a README: update regarding the offlineimap3 fork
Github-ref: https://github.com/OfflineIMAP/offlineimap/issues/670
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-09-05 01:23:38 +02:00
Rodolfo García Peñas (kix) 595b814074 ui init is lintian clean
This patch only adds an space between the hash and the first character.

Backported from:
a88a9cf28e

Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-08-29 23:23:28 +02:00
Rodolfo García Peñas (kix) 2722234d16 threadutil imports not used
These imports are not used.

Backported from:
a655fa4fc2

Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-08-29 23:23:28 +02:00
Rodolfo García Peñas (kix) 3d925b006a Changed wrong comparison equal
Backported from:
e84e932df4

Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-08-29 22:54:15 +02:00
Rodolfo García Peñas (kix) c7cb68ad7f Comparison error
Backported from:
75ce6e71f3

Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-08-29 22:53:16 +02:00
Reto Schnyder f6935342c2 Fix hooks for IDLE sync
`presynchook` and `postsynchook` for IDLE-triggered syncs were broken by
da69fd8. This fixes them.

Signed-off-by: Reto Schnyder <reto.a.schnyder@bluewin.ch>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-08-22 01:54:48 +02:00
Nicolas Sebrecht 21332efb08 folder: IMAP: fix issue when the response of searchforheaders is the same UID multiple times
When the IMAP server doesn't support the UIDPLUS extension so we fallback on the
internal legacy way of mapping the UID to the uploaded message (with the email
header). If the server responds with 2 UIDs offlineimap doesn't know which one
is correct and reports an error.

If for some reason all the returned UIDs are equals it's very likely fine to
map either one.

Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
Tested-by: https://github.com/mpsq
Github-ref: https://github.com/OfflineIMAP/offlineimap/issues/676
2020-07-22 22:31:01 +02:00
Nicolas Sebrecht fdb9974ab7 contrib/release..py: the version information has moved to offlineimap.version
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-04-22 16:07:20 +02:00
Martin Di Paola c13e0135a7 Require the minimal dependencies in python package
When an user installs offlineimap from PyPI using pip, the dependencies
of offlineimap are not installed automatically. See #661.

Requiring explicitly the dependencies in the setup.py adds them in the
metadata of the package so pip can install them next with offlineimap.

To avoid duplicated dependencies, requirements.txt delegates to setup.py
the listing of the minimal dependencies while also adding two more
optional dependencies.

Signed-off-by: Martin Di Paola <martinp.dipaola@gmail.com>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-04-22 15:51:13 +02:00
Martin Di Paola 8599cab2ab Move out pkg attributes from __init__.py
The setup.py uses the version, author and others attributes as metadata
for the python package.

The setup read them from offlineimap/__init__.py doing an import of the
module first.

Unfortunately the import also try to import all the dependencies of
offlineimap which may not be installed by the time. See #661.

Moving out the attributes in a separated module allows to be imported by
setup.py whitout needing to import the whole offlineimap.

The import of test.OLItest has the same limitation. In this case the
import was delayed until the real test case run is executed avoiding
again loading offlineimap from the begin.

Signed-off-by: Martin Di Paola <martinp.dipaola@gmail.com>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
2020-04-22 15:51:13 +02:00
14 changed files with 150 additions and 67 deletions

24
BACKERS.md Normal file
View File

@ -0,0 +1,24 @@
### Many thanks to our wonderful Sponsors! Your generous support helps us maintain OfflineIMAP.
<!-- PLATINUM sponsors: in the README.md and on the front page of website -->
<!-- https://shields.io/opencollective/tier/offlineimap-organization/12940 -->
<!-- GOLD sponsors: in the README.md and on the front page of website -->
<!-- https://shields.io/opencollective/tier/offlineimap-organization/12941 -->
# SILVER sponsors <!-- here and on sponsors page of website -->
<!-- https://shields.io/opencollective/tier/offlineimap-organization/12942 -->
[![silver-zeronet-logo]][silver-zeronet-link]
![Silver Sponsors][silver]
# BRONZE sponsors <!-- here only -->
<!-- https://shields.io/opencollective/tier/offlineimap-organization/12873 -->
![Bronze Sponsors][bronze]
<!-- links / references -->
[silver]: https://opencollective.com/offlineimap-organization/tiers/silver-sponsor.svg "Our Silver Sponsors"
[silver-zeronet-logo]: https://github.com/OfflineIMAP/offlineimap.github.io/raw/master/assets/img/sponsors/zeronet.svg
[silver-zeronet-link]: https://zeronet.co.nz/ "Zeronet - naturally fast internet"
[bronze]: https://opencollective.com/offlineimap-organization/tiers/bronze-sponsor.svg "Our Bronze Sponsors"

View File

@ -15,6 +15,50 @@ Note to mainainers:
* The following excerpt is only usefull when rendered in the website.
{:toc}
### OfflineIMAP v7.3.4 (2021-08-03)
#### Notes
The release is likely the last minor release. This project will be maintained
for minor bug fixes only.
In this version we've backported patches from the offlineimap3 project. There's
no new features. Users should try this fork. The official project is there and
is maintained by Rodolfo:
https://github.com/OfflineIMAP/offlineimap3
This release was tested by:
- Nicolas Sebrecht
#### Authors
- Nicolas Sebrecht (5)
- Rodolfo García Peñas (kix) (4)
- Martin Di Paola (2)
- Reto Schnyder (1)
#### Fixes
- folder: IMAP: fix issue when the response of searchforheaders is the same UID multiple times. [Nicolas Sebrecht]
- Fix hooks for IDLE sync. [Reto Schnyder]
- Changed wrong comparison equal. [Rodolfo García Peñas (kix)]
- Comparison error. [Rodolfo García Peñas (kix)]
- remove outdated links to travis. [Nicolas Sebrecht]
- ui init is lintian clean. [Rodolfo García Peñas (kix)]
- Require the minimal dependencies in python package. [Martin Di Paola]
#### Changes
- README: update regarding the offlineimap3 fork. [Nicolas Sebrecht]
- redirect the users to offlineimap3. [Nicolas Sebrecht]
- threadutil imports not used. [Rodolfo García Peñas (kix)]
- Move out pkg attributes from __init__.py. [Martin Di Paola]
### OfflineIMAP v7.3.3 (2020-04-11)
#### Notes

View File

@ -1,14 +1,8 @@
Upstream status (`master` branch):
[![OfflineIMAP build status on Travis-CI.org](https://travis-ci.org/OfflineIMAP/offlineimap.svg?branch=master)](https://travis-ci.org/OfflineIMAP/offlineimap)
[![OfflineIMAP code coverage on Codecov.io](https://codecov.io/gh/OfflineIMAP/offlineimap/branch/master/graph/badge.svg)](https://codecov.io/gh/OfflineIMAP/offlineimap)
[![Gitter chat](https://badges.gitter.im/OfflineIMAP/offlineimap.png)](https://gitter.im/OfflineIMAP/offlineimap)
Upstream status (`next` branch):
[![OfflineIMAP build status on Travis-CI.org](https://travis-ci.org/OfflineIMAP/offlineimap.svg?branch=next)](https://travis-ci.org/OfflineIMAP/offlineimap)
Financial contributors: [![Financial Contributors on Open Collective](https://opencollective.com/offlineimap-organization/all/badge.svg?label=financial+contributors)](https://opencollective.com/offlineimap-organization)
[offlineimap]: http://github.com/OfflineIMAP/offlineimap
[offlineimap3]: http://github.com/OfflineIMAP/offlineimap3
[website]: http://www.offlineimap.org
[wiki]: http://github.com/OfflineIMAP/offlineimap/wiki
[blog]: http://www.offlineimap.org/posts.html
@ -23,7 +17,14 @@ Links:
***"Get the emails where you need them."***
[Official offlineimap][offlineimap].
> IMPORTANT NOTE: This repository is for python2 only. The support for offlineimap3
> is happening in [Official offlineimap for python3][offlineimap3].
>
> I'll still lazily maintain this legacy offlineimap but users should definitely go with
> offlineimap3.
- [Official offlineimap for python3][offlineimap3].
- [Official offlineimap for python2][offlineimap].
## Description
@ -45,22 +46,9 @@ 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](http://github.com/OfflineIMAP/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][blog].
>
> Nicolas Sebrecht. ,-)
The [offlineimap][offlineimap] project was forked to
[offlineimap3][offlineimap3] to support python3. Contributions are welcome to
this project.
## Contributors
@ -137,14 +125,15 @@ Bugs, issues and contributions can be requested to both the mailing list or the
## Requirements & dependencies
* Python v2.7+
* Python v2.7.x
* six (required)
* rfc6555 (required)
* imaplib2 >= 2.57 (optional)
* gssapi (optional), for Kerberos authentication
* portalocker (optional), if you need to run offlineimap in Cygwin for Windows
* Python v3.4+ ***[STALLED] (experimental: [see known issues](https://github.com/OfflineIMAP/offlineimap/issues?q=is%3Aissue+is%3Aopen+label%3APy3))***
* Python v3: See the [offlineimap3][offlineimap3] fork of
[offlineimap][offlineimap].
## Documentation

View File

@ -204,9 +204,8 @@ class OfflineimapInfo(object):
cmd = shlex.split("./offlineimap.py --version")
return run(cmd).rstrip().decode(FS_ENCODING)
def editInit(self):
return system("{} ./offlineimap/__init__.py".format(EDITOR))
def editVersion(self):
return system("{} ./offlineimap/version.py".format(EDITOR))
class User(object):

View File

@ -357,7 +357,7 @@ class Release(object):
User.request("going to make a new release after {}".format(currentVersion))
def updateVersion(self):
self.offlineimapInfo.editInit()
self.offlineimapInfo.editVersion()
def checkVersions(self, current, new):
if new == current:
@ -405,7 +405,7 @@ class Release(object):
announce.close()
def make(self):
Git.add('offlineimap/__init__.py')
Git.add('offlineimap/version.py')
Git.add('Changelog.md')
commitMsg = "v{}\n".format(newVersion)
for tester in self.testers.getListOk():

View File

@ -1,18 +1,17 @@
__all__ = ['OfflineImap']
__productname__ = 'OfflineIMAP'
# Expecting trailing "-rcN" or "" for stable releases.
__version__ = "7.3.3"
__copyright__ = "Copyright 2002-2020 John Goerzen & contributors"
__author__ = "John Goerzen"
__author_email__= "offlineimap-project@lists.alioth.debian.org"
__description__ = "Disconnected Universal IMAP Mail Synchronization/Reader Support"
__license__ = "Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception)"
__bigcopyright__ = """%(__productname__)s %(__version__)s
%(__license__)s""" % locals()
__homepage__ = "http://www.offlineimap.org"
banner = __bigcopyright__
from offlineimap.version import (
__productname__,
__version__,
__copyright__,
__author__,
__author_email__,
__description__,
__license__,
__bigcopyright__,
__homepage__,
banner
)
from offlineimap.error import OfflineImapError
# put this last, so we don't run into circular dependencies using

View File

@ -402,6 +402,7 @@ class IMAPFolder(BaseFolder):
return 0
matchinguids = matchinguids.split(' ')
matchinguids = list(set(matchinguids)) # Remove duplicates.
self.ui.debug('imap', '__savemessage_searchforheader: matchinguids now '
+ repr(matchinguids))
if len(matchinguids) != 1 or matchinguids[0] is None:

View File

@ -102,7 +102,7 @@ class IMAPServer(object):
self.starttls = repos.getstarttls()
if self.usessl \
and self.tlslevel is not "tls_compat" \
and self.tlslevel != "tls_compat" \
and self.sslversion is None:
raise Exception("When 'tls_level' is not 'tls_compat' "
"the 'ssl_version' must be set explicitly.")
@ -823,11 +823,12 @@ class IdleThread(object):
statusrepos = account.statusrepos
remotefolder = remoterepos.getfolder(self.folder, decode=False)
hook = account.getconf('presynchook', '')
account.callhook(hook)
hook_env = {
'OIMAP_ACCOUNT_NAME': account.getname(),
}
account.callhook('presynchook', hook_env)
offlineimap.accounts.syncfolder(account, remotefolder, quick=False)
hook = account.getconf('postsynchook', '')
account.callhook(hook)
account.callhook('postsynchook', hook_env)
ui = getglobalui()
ui.unregisterthread(currentThread()) #syncfolder registered the thread

View File

@ -545,7 +545,7 @@ class IMAPRepository(BaseRepository):
:param foldername: Full path of the folder to be created."""
if foldername is '':
if foldername == '':
return
if self.getreference():

View File

@ -15,13 +15,12 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from threading import Lock, Thread, BoundedSemaphore, currentThread
from threading import Lock, Thread, BoundedSemaphore
try:
from Queue import Queue, Empty
except ImportError: # python3
from queue import Queue, Empty
import traceback
import os.path
from offlineimap.ui import getglobalui

View File

@ -24,7 +24,7 @@ UI_LIST = {'ttyui': TTY.TTYUI,
'syslog': Noninteractive.Syslog,
'machineui': Machine.MachineUI}
#add Blinkenlights UI if it imports correctly (curses installed)
# add Blinkenlights UI if it imports correctly (curses installed)
try:
from offlineimap.ui import Curses
UI_LIST['blinkenlights'] = Curses.Blinkenlights

13
offlineimap/version.py Normal file
View File

@ -0,0 +1,13 @@
__productname__ = 'OfflineIMAP'
# Expecting trailing "-rcN" or "" for stable releases.
__version__ = "7.3.4"
__copyright__ = "Copyright 2002-2021 John Goerzen & contributors"
__author__ = "John Goerzen"
__author_email__= "offlineimap-project@lists.alioth.debian.org"
__description__ = "Disconnected Universal IMAP Mail Synchronization/Reader Support"
__license__ = "Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception)"
__bigcopyright__ = """%(__productname__)s %(__version__)s
%(__license__)s""" % locals()
__homepage__ = "http://www.offlineimap.org"
banner = __bigcopyright__

View File

@ -1,5 +1,5 @@
# Requirements
six
# Minimal requirements defined in setup.py
-e .
# Extra "optional" requirements
gssapi[kerberos]
portalocker[cygwin]
rfc6555

View File

@ -5,7 +5,7 @@
# IMAP synchronization
# Module: installer
# COPYRIGHT #
# Copyright (C) 2002 - 2018 John Goerzen & contributors
# Copyright (C) 2002 - 2020 John Goerzen & contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -23,9 +23,13 @@
import os
from distutils.core import setup, Command
import offlineimap
import logging
from test.OLItest import TextTestRunner, TestLoader, OLITestLib
from os import path
here = path.abspath(path.dirname(__file__))
# load __version__, __doc__, __author_, ...
exec(open(path.join(here, 'offlineimap', 'version.py')).read())
class TestCommand(Command):
"""runs the OLI testsuite"""
@ -42,6 +46,11 @@ class TestCommand(Command):
pass
def run(self):
# Import the test classes here instead of at the begin of the module
# to avoid an implicit dependency of the 'offlineimap' module
# in the setup.py (which may run *before* offlineimap is installed)
from test.OLItest import TextTestRunner, TestLoader, OLITestLib
logging.basicConfig(format='%(message)s')
# set credentials and OfflineImap command to be executed:
OLITestLib(cred_file='./test/credentials.conf', cmd='./offlineimap.py')
@ -49,20 +58,25 @@ class TestCommand(Command):
#TODO: failfast does not seem to exist in python2.6?
TextTestRunner(verbosity=2,failfast=True).run(suite)
reqs = [
'six',
'rfc6555'
]
setup(name = "offlineimap",
version = offlineimap.__version__,
description = offlineimap.__description__,
long_description = offlineimap.__description__,
author = offlineimap.__author__,
author_email = offlineimap.__author_email__,
url = offlineimap.__homepage__,
version = __version__,
description = __description__,
long_description = __description__,
author = __author__,
author_email = __author_email__,
url = __homepage__,
packages = ['offlineimap', 'offlineimap.folder',
'offlineimap.repository', 'offlineimap.ui',
'offlineimap.utils'],
scripts = ['bin/offlineimap'],
license = offlineimap.__copyright__ + \
license = __copyright__ + \
", Licensed under the GPL version 2",
cmdclass = { 'test': TestCommand}
cmdclass = { 'test': TestCommand},
install_requires = reqs
)