Small batch of bugfixes.
Changes:
- Fetch whole body rather than just 1024 bytes for excerpt
- Don't assume we have a part when parsing bodystructure
- Don't fail when bodystructure missing from email response
- Fix call to UID set during missing fix
- Don't throw sentry errors for not found accounts
- Don't fail when removing an already removed oauth req
- Allow disabling session token via env var
- Fix typo
- Use new notarytool for MacOS codesigning
- Docker fixes
- Update poetry lock
Thing release fixes a bunch of issues with search, which should now function as expected.
Also included are unread counts on the sidebar, and on MacOS the an initial implementation of notifications for new emails and badge counts.
Changes:
- Fix JSON in HTML attributes
- Display search match counts in sidebar folder links
- Remove redundant assignment
- Setup prettier with eslint
- Git blame ignore prettier commit
- Install & run prettier on all JS(X)
- Use cache to indicate if a folder exists, or used to exist, on start
- Style fixes for search mode & sidebar
- Refactor handling of email store search mode/control
- Remove beta text in sidebar
- Use bundled certifi CA file for SSL IMAP & SMTP connections
- Misc cleanup & logging improvements
- Send notifications for newly synced inbox emails
- Show unread badge & inbox sidebar link counts
- Add notification API & implement MacOS notifications
- Add debug log at the end of route handling
- Use sentinel object to detect missing values
- Cleanup old requirements code
- Add
.git-blame-ignore-revs
file - Use poetry for Python dependency management
- Run black & isort
- Move window file into module
- Use common prefix for window management endpoints
- Update MacOS dev requirements
Changes:
- Fix Windows builds temporary workaround for choco
- Update changelog for v1.2206171656
- Fix editing emails without quotes
- Fix email send & save button handling / API
- Pin
dsdev-utils
package to avoid bug - Fix cryptography version in Docker requirements
- Cleanup changelog commit message
Changes:
- Fix editing emails without quotes
- Fix email send & save button handling / API
- Pin
dsdev-utils
package to avoid bug - Fix cryptography version in Docker requirements
- Cleanup changelog commit message
Slow release to get out this one due to unforseen complications with Windows testing. Next up focus is on the Windows version including a proper installer.
Changes:
- Only run Linux tests with xvfb
- Bump python version file
- Run the tests with xvfb on Linux
- Add FUNDING config
- Cleanup of build action, start building Linux again
- Install webview2-runtime on Windows before build
- Only run requirements workflow on req file change
- Make pytest verbose
- Use Python 3.8 for Windows builds
- Use platform specific requirements for build
- Add compiled development requirements
- Update compiled requirements
- Upload compiled requirements as artifacts
- Upgrade to python v3.9.12
- Don't throw error for bug in pyupdater refresh method
- Fixup requirement versions
- Run requirements compilation on main branch
- Upgrade pip before compiling requirements
- Upgrade Windows version in workflows
- Add requirements compile workflow
- Upgrade to pywebview 3.6
- Generate development requirements each platform
- Pass session token to newly opened windows in browser mode
- Capture
IMAP4.Abort
errors - Add a basic docker-compose.yml for deployment convenience
- Add options to deactivate external APIs + opt-out for update
- Rework emails API to work around flask/werkzeug path handling fails
- Improve handling of body IMAP responses
- Stop sending JS
RequestError
s to Sentry that the server already handled - Include tracebacks for all error logs
- Fix offline not loading cached date
- Don't fail folders endpoint for individual account issues
- Add notarize team ID support/envvar.
More fixes for Outlook accounts.
Changes:
- Always fetch IMAP capabilities when opening new connections.
- Fix support for IMAP servers that still don't support UTF-8 (Outlook).
This release fixes SMTP with Outlook accounts.
Changes:
- Re-implement the "copy from inbox" feature.
- Bring in Python 3.8 SMTP fix.
Changes:
- Fix mixin import.
- Handle when a remote build is missing and optionally continue.
- Fix make github release function.
Changes:
- Ensure we load meta files with utf8 encoding.
- Strip off git tag v prefix.
- Fix call to docker tag.
This release adds support for signatures and huge improvements to the send message editor.
Changes:
- Remove unused release script.
- Don't check session token on index in non-app mode.
- Always create column + meta stores.
- Implement link entities in the editor component using control input.
- Make control input component/store more flexible.
- Only generate text as HTML if there's text data.
- Rewrite email send app.
- Fix contact delete button.
- Separate text from HTML-ified text in messages.
- Fix loading folders after initial app start.
- Add some basic styles to the drafttail editor.
- Add draft-js and remove quill.
- Add signatures to the settings model.
- Add signatures to settings.
- Fix using false boolean in class name.
- Complete conversion of account list to use overlay list base.
- Don't allow saving account form with an empty name.
- Extract common editor component parts.
- Extract common list overlay component methods.
- Add basic app run test.
- Improve exit handling in main script.
- Add test stage before building.
- Disable Linux build/test for now.
- Bump ipython dev requirement.
- Add pytest dev requirement.
- fix config volume permission issues
Contains an urgent fix for the latest Windows build.
Changes:
- Finish complete release script.
- Tolerate wobbly MacOS notarization process.
- Update Windows requirements.
- Update dev requirements.
Changes:
- Make build commmand work on Windows.
- Fix
check_output
call. - Remove leftover temp version lock references.
- Cleanup version release handling.
- Add attachments to IMAP connection mock bodystructure output.
- Improve formatting of bytes in attachments.
- Run build work flow on push & tag.
- Cleanup account form styling.
- De-duplicate account settings state handling functions.
- Bump to upstream pywebview commit (MacOS reqs only for now).
- Run the build workflow on main branch.
- Update MacOS requirements.
- Add the latest docker tag when making a release.
- Fix add contact form styles.
- Hide any overflow on email thread avatar initials.
- Merge the main + user folders in the sidebar.
- Improve account settings error handling UX.
- Don't pass
false
as a classname, use undefined. - Fix button & form styling bugs in contacts app.
- Fix two bugs in the connection mocks.
- Add compact columns style/setting.
- Fix prop type validation on tooltip components.
- Don't assume the inbox alias setting exists.
- Add licensed settings to disable Sentry/Posthog.
- Fix account name validation.
- Update for pywebview 3.5.
- Use git version of pywebview with bugfix.
- Fixes for building Linux client in Docker.
- Add comment for MacOS Python package install/build.
- Use github path to fix macOS path.
- Try to fix macOS path before building.
- Don't use
pip-tools
in builds just normal pip reqs. - Use python3/pip3 commands.
- Install macOS pkg with old macosx SDK target.
- Pin specific commits for third party actions.
- More fixes for the binary filtering in spec.
- Fix indentation in spec file.
- Update docker reqs & fix Docker builds.
- Update spec exclusion of libraries.
- Install gtk/cairo/webkit apt packages when building for Linux.
- Downgrade werkzeug in linux requirements.
- Set
MACOSX_DEPLOYMENT_TARGET=10.14
in build workflow. - Add Linux build & requirements.
- Ensure clean script removes any release changelog file.
- Add macOS build target.
- Cleanup build action.
- Use Windows server 2016.
- Use matrix strategy for build action.
- Add fake pyu config for GitHub builds.
- Upload the build to S3 once complete.
- Pass through secrets when building the app.
- Make an empty
.pyupdater
directory before building. - Setup Windows build workflow.
- Add Windows
pywin32
requirement.
Changes:
- Return & display error information when fetching email texts.
- Handle update errors in the UI.
- Fix handling account UI when failing to auto setup a new acccount.
- Improve error when we autoconf but login still fails.
- Add temporary handling of missing header errors.
- Switch to the GitHub hosted ISPDB.
- Capture & log request errors contacting the ISPDB.
- Restore auto creation of GitHub releases.
- Fix pywebview debug in window hacks.
- Wait before starting to check for notarization status.
- Replace invalid header characters when decoding.
- Catch and log request errors fetching contact icons.
- Add
pywin32
Windows requirement.
Changes:
- Cleanup request error handling.
- Set release for Sentry.
- Log which app was loaded to PostHog.
- Capture/handle OAuth request errors properly.
- Pass through
werkzeug.HTTPException
errors properly. - Ignore missing folder UID lists in cleanup.
- Pass utf-8 charset when searching against the server.
- Don't attempt to decode null data.
- Don't raise error when server returns less than expected messages.
- Don't delete oauth responses until tested.
Changes:
- Bump pyupdater to v4.
- Update Windows requirements.
- Only run
pip-sync
during release builds. - Don't mangle names when compiling JavaScript.
- Fix path fields in pyupdater spec template.
- Fix bug where changing account name breaks cached headers.
- Fix handling of different return IMAP keys.
- Fix logo on meta window.
- Downgrade to python3.8.
Big release, top highlight is Google OAuth integration enabling "sign in with Google".
Changes:
- Fix email header response parsing for Zoho mail.
- Use one
criticalRequestNonce
per thread load. - Fixup build instructions for M1 Macs.
- Pass Posthog settings to base template.
- Reoder window settings.
- Throw a proper error if no root element is found.
- Add Posthog JS to capture app load events & settings.
- Add debug sentry flag.
- Add random device IDs to add to Sentry/Posthog events.
- Use a
TimedRotatingFileHandler
instead ofFileHandler
. - Fix missing response on OAuth delete response API.
- Update MacOS compiled pip requirements.
- Remove
object-hash
JS requirement. - Use an incremental critical request nonce to fix weirdness.
- Re-ehlo before attempting to re-auth when refreshing OAuth token for SMTP.
- Fix missing favicon in builds.
- Delete OAuth responses only after they're handled.
- Rework session token route wrapper.
- Use warning log for view network exceptions.
- Don't send sentry JS errors for network errors.
- Cleanup request error handling.
- Bump defusedxml to v0.7.0.
- Fix license error response message key.
- Make new account flow always same width.
- Hide any previous account error when we connect.
- Fix connected text on welcome settings.
- Improve license error message.
- Cleanup license content before parsing.
- Don't log refresh tokens.
- Capture OAuth errors and refresh the access token.
- Fix missing sentry sdk MacOS requirement.
- Implement bundling of "hidden" data when building.
- Update text when failing to connect to OAuth accounts.
- Move settings errors into dedicated message element.
- Hide username & password when editing OAuth accounts.
- Use hint to fix connected/not connected text in account settings.
- Provide hint on whether an account is connected in settings UI.
- Properly abort when checking for duplicate account names.
- Hide password field when editing OAuth email accounts.
- Add setting migration for removal of
copy_on_move
. - Only hide archive when showing other tags a thread has.
- Highlight trashed messages in thread view.
- Get Google OAuth settings from hidden data.
- Fix SMTP oauth2 authentication string/process.
- Don't assume oauth responses contain a (new) refresh token.
- Limit the max width of the new account form.
- Use "sign in with Google" language.
- Add cancel button when waiting for oAuth consent.
- Remove Google app password information.
- Add oauth settings for gmail.
- Implement OAuth based authentication for IMAP/SMTP connections.
- Add OAuth handlers, API and support to accounts/settings APIs.
- Don't add password setting during autoconfiguration.
- Implement OAuth new account form in settings app.
- Tidy up tag listing in email column threads.
- Use
json.load
>json.loads
. - ADd Sentry to the frontend.
- Add Sentry to the backend server.
- Add "hidden" data at build time.
- Sync sidebar folders by default.
- Move all regular interval email syncs to the main component.
- Render other folders as labels in threads.
- Remove complicated "copy on move" feature.
- Fix sidebar header buttons when frameless.
- Add tooltips w/keyboard shortcuts to header search/compose buttons.
- Add c keyboard shortcut to open a new compose window.
- Rework keyboard shortcut handling to work with combinations.
- Add s keyboard shortcut to star/unstar threads.
- Change the search keyboard shortcut from s -> /.
- Add move button to threads, remove explicit copy shortcut.
- Use self closing tags for icons.
- Correct unstar button tooltip text.
- Make it possible to hide the main column.
- Enable save sent copies setting by default unless gmail.
- Add delete on trash setting.
- Move pyinstaller/pyupdater into base requirements.
- Prevent paths being passed as download filenames.
- Add delete emails server API.
- Filter threads in the trash column to only show trashed messages.
- Add email store
deleteEmails
function. - Show a star on starred threads (not just hover!).
- Add tooltips to the thread buttons.
- Add permanent delete button to threads in the trash folder.
- Reimplement the tooltip in JavaScript.
- Only trigger stale labels on unassigned bugs.
- Upgrade pyinstaller & flake8 dev requirements.
- Upgrade pyobjc to 7.2.
- Upgrade to Python 3.9.
- Use node 16.
- Upgrade yarn packages.
- Fix webpack argument order.
- Remove no longer needed MacOS build fixes.
Big release containing many bug fixes and performance improvements. Major feature is a new, simplified setup account flow.
Changes:
- Fix docker builds.
- Upgrade/audit yarn packages.
- Fix updating accounts missing account index ID.
- Better label for the account display name.
- Don't allow adding accounts with no display name.
- Better prop name for adding new account flag.
- Tidy up new account form buttons.
- Fix Windows ico file.
- Fix up last release changelog (Windows only).
- Restore absolute path for make constants.
- Formatting clean script imports.
- Run
pip-sync
before building. - Fixup readme information.
- Use
pip-tools
to manage requirements. - Fix window open URL server & host.
- Move to Open Sans font and cleanup typography.
- Fix license text issues.
- New (final) icons.
- Remove unncessary resize on settings window load.
- Fix meta file header icon position.
- Add links to iCloud/Google app password documentation pages.
- Update to new logo.
- Improve style of the error boundary.
- Implement app loading initial page content.
- Remove unused state variables.
- Use
cheroot
server in production/app mode. - Update account API path for consistency.
- Don't require a Docker image to release.
- Add two-phase new account form.
- Return back whether autconf was successful in account test API.
- Allow frontend to specify domain to autoconf.
- Add type hints to autoconf module.
- Enable passing a specific domain into
get_autoconf_settings
. - Add per-domain hard-coded connection settings for main providers.
- Setup theme CSS for settings app.
- Add default (true) for SSL verify hostname connection setting.
- Disable resize on meta window.
- Reduce default window width.
- Confirm before closing settings window.
- Tidy up contacts app header.
- Remove loader background color.
- Update settings app to use tabbed design.
- Fix error handling contact emails without
@
. - Provide
Message-ID
when creating messages to send. - Add
resizable
&confirm_close
options when opening windows. - Add resize window API/util.
- Remove unused minimize/maximize window API/functions.
- Rework themes to use variables, one common set of styles.
- Add header button set / active styles.
- Don't assume emails have a message ID.
- Use the same JS files in all modes in the base template.
- Restore old static folder location.
- Use
url_for
in frozen (app) static redirect. - Add
/favicon.ico
endpoint. - Install
cargo
to fixcryptography
compilation. - Batch save contacts from multiple messages together.
- Fix bug in saving contacts.
- Fix keyboard shortcuts remaining disabled after searching.
- Use the latest external email for thread avatars.
- Add favicon for browser mode.
- Fix static folder path.
Windows only release, fixing pywebview issues.
Changes:
- Upgrade to pywebview
3.4
. - Implement custom
smtplib
override to enable Unicode passwords. - Updated screenshot.
- Debounce the main process emails function.
- Use
ReactDOM.unstable_batchedUpdates
to batch email updates. - Use the icon from the client assets in readme.
- Tidy up docstring.
This release adds support for IMAP namespaces.
Changes:
- Update folder settings when creating a new account.
- Add folder prefix to account settings.
- Implement proper IMAP namespace handling.
- Rewrite account test API to use an exception for errors.
- Fix margin on welcome settings header.
- Don't lookup the same domain twice in autoconf.
This releases introduces a major design overhaul and cleanup, with dark mode support. Check out the settings to pick default, light or dark theme settings.
Changes:
- Correct thread title border colour in default/light themes.
- Fix thread message border in dark theme.
- Only add dark mode event listener if supported.
- Fixes for dark theme colours.
- Tweak contacts header search bar margin.
- Sort merged single sender threads properly.
- Make control overlay text bigger.
- Combine if statements.
- Add theme class after removing old one (in case same).
- Add dark/light theme settings.
- Fix 1px extra margin error on main column.
- Tidy up headers, make buttons not drag window.
- Add avatars to contact list.
- Rework Cocoa traffic light button repositioning.
- Dramatically improve the fake IMAP response content.
- Never enable caching if we're using fake IMAP responses.
- Always sync trash folder, as may contain thread messages.
- Re-order main alias folder sidebar ordering.
- Improve date formatting for this-year dates.
- Increase text size of meta/meta-file apps.
- Don't attempt to make drag region on non-element.
- Improve short address formatting.
- Add dark/light theme settings to the setting model.
- Setup dark/light theme switching and activation on app boot.
- Remove Robot slab import.
- Tidy up column email design/layout.
- Add settingsStore to window for debugging.
- Import the new dark/light themes.
- Ensure tooltips always appear on top.
- Move thread sidebar width into less variable.
- Allow open column to be larger and detect/fix main column width.
- Set frameless/wrapper classes in generic app boot.
- Add "s"/escape keyboard shortcut to open/close search.
- Move search out of sidebar and above the columns.
- Tidy up sidebar icons, make spam yellow.
- Move purchase button to top of sidebar.
- Move save/etc window buttons into headers, tidy up styling.
- Remove unused CSS.
- Rename
frameless.less
->platforms.less
and cleanup. - Move font sizes into less variables.
- Add dark & light theme CSS.
- Break out all colour related CSS into a theme.
- Use webpack
--mode
argument instead of envvar. - Better name for get main JS filename in webpack config.
- Use python rather than script direct (Windows dev support).
- Rename less variable
orangee
->red
. - Replace/simplify the headerbar + dragbar components.
- Update spam icon (exclamation triangle).
- Remove Roboto Slab font.
- Add
lock_function
util. - Fix cache disable envvar flag.
- Raise an error when parts missing in dev.
- Lock the
add_contacts
function. - Capture
LoginError
s connecting to IMAP servers. - Use deep path for scroll polyfill to fix Windows support.
- Use JS screen info to cap saved window height/width.
- Pass JS detected window position/size/resolution to backend.
- Expand support for German IMAP folder names (provided by @georks).
- Sort column threads after including incoming.
- Merge pull request #148 from vilhelmprytz/vilhelmprytz-minor-readme-fix
- Fix key error when accessing missing header parts.
- Lock when adding/removing cached header flags.
- Fix unsetting column maxwidth.
- Add CSS classes to each of the sidebar alias folders.
- Make new avatar component and extract icons from thread message.
- Show incoming threads when moving to a new column.
- Replace "intsall" with "install" in README
- Update yarn lock file.
- Add seamless scroll polyfill package.
- Remove old debug statement (whoops!).
- Make the column header email count respect the selected account.
- Fix deleted/moved/archived threads re-appearing when switching main column.
- Update drafts sidebar icon (file -> pencil).
- Move sent after archive in sidebar.
- Make moving messages undo-able.
- Ensure development works properly / similarly to app builds.
- Split up webpack app bundles and extract files/css.
- Remove unused style.
- Install less
pyobjc
packages and upgrade to v6.2.2. - Remove pinned requirements.
Major addition: always show images from a given sender.
Changes:
- Use newer pywebview commit than released.
- Implement "window hacks" for cocoa.
- Tidy up the add contact form/contacts app.
- Fix contact option list in send app.
- Restore sleep inside main python when debug.
- Upgrade pywebview to 3.3.5.
- Offer to always allow images for a message in thread view.
- Implement allowed images in email text API.
- Add API to create/delete allowed image flags for an email.
- Add the allowed images database table/model.
- Remove
Folder.get_email_header_parts
. - Fix save contacts call argument.
- Make keyboard column scrolling smoother & consistent.
- Scroll down to first open message on open thread.
- Remove sleep before starting app in dev.
- Actually remove
pydash
requirement. - Tidy up logging module mess - always log to stderr.
- Add batch save contacts function and use when adding contacts.
- Store contacts from trash.
- More descriptive function name.
- Add get contacts API endpoint.
- Improve consistency of contacts module.
- Use functools LRU cache
cache_clear
. - Replace
pydash.memoize
withfunctools.lru_cache
. - Fix scroll container on contacts app.
Changes:
- Fix column jumping where all remaining columns emptry.
Changes:
- Only warn when part is missing on thread fetch.
- Fix connection mock folder class for offline dev.
- Try the following column if the first is empty when navigating between.
- Redo attachment handling to be compatible with browser mode.
- Fix empty column message by always showing it.
- Reload the welcome window after saving initil settings.
- Upgrade to webpack 4 & tidy up packages.
- Update dev instructions.
- Update readme to remove Linux official support.
- Don't build Linux app by default.
- Fix the new issue links.
No Linux build yet unfortunately due to upstream changes breaking the build process.
Changes:
- Correct providers & support doc link constants.
- Hide emails immediately when dropping on sidebar folders.
- Automatically clean the folder cache after 120s after start.
- Implement vacuuming for the sqlite folders database.
- Pass message object, not string, when saving copies of sent messages.
- Add help button to sidebar, with setting to hide.
- Update license button.
- Update screenshot.
Minor improvements - note you will need to resize/position the main window.
Changes:
- Further improve the fake IMAP mocking.
- Store window position as JSON in new location.
- Icon support for iCloud/Outlook accounts.
- Include account key when merging threads.
- Move docs to website.
- Create codeql-analysis.yml
Changes:
- Fix reply/reply all sending to logic.
This release adds full draft support (save + edit), as well as move and copy keyboard shortcuts (m & c respectively).
Changes:
- Fix variable in send handler.
- Rework the connection mock classes for better testing.
- Fix non-main window drag bar z-index.
- Fix sidebar show/hide button count.
- Tidy up the control input style.
- Make threads slide away when moving.
- Implement copy & move keyboard shortcuts.
- Yum upgrade run.
- Bump webpack dev server patch version.
- Actually fix subject header lines.
- Use switch instead of all the if statements for keyboard controls.
- Fix overflow hiding tooltip in column email threads.
- Fix z-index of header errors in non-main windows.
- Fix width of add new column form.
- Complete implementation of draft saving and editing.
- Tweak merging of single sender threads:
- Add save draft/email button to send app.
- Don't show archive button for draft threads.
- Add append email to folder API endpoint.
- Add many more Python type annotations/mypy setup.
- Move
fake_imap.py
->connection_mocks.py
. - Fix header errors showing behind columns.
- Add contact icons checkbox to welcome settings flow.
Changes:
- Sort the folder list so we group single thread messages properly.
- Fix drag bar on non-main window.
- Always render the dragbar.
- Fix
.no-select
class w/WebKit.
This version brings a major update to Kanmail including an overhaul of the column and thread designs and a number of fixes.
Changes:
- Fix Quill editor to use
div
instead ofp
for blocks. - Fix call to delete header items.
- Ignore null thread references.
- Remove pointless keyboard disabling.
- Major overhaul of main emails app design.
- Add
randomcolor
npm package. - Default yes to all release script prompts.
- Don't apply dragging functions when not frameless.
- Add get contact icons + group single threads settings.
- Enable cross origin access in dev for usable stack traces.
- Fix incorrect decoding of attachments (leave as bytes).
- Accept the session token as a URL parameter as well as header.
- Add API to fetch icons for emails.
- Rename send app less file.
- Show JS error tracebacks.
- Enable merging threads by subject behind a flag.
- Add logic to enable merging single emails from the same sender.
- Don't include column meta count if the folder does not exist on the server.
- Stop closing thread on keyboard shortcuts.
- Add
makeNoDragElement
function. - Move
makeDragElement
intowindow.js
.
Changes:
- Don't close the window when saving onboarding settings!
- Add top margin on send + welcome settings.
- Add docs link to issue chooser.
- Remove temp changelog removal from
make.clean
script. - Comment out github release bits as does not work.
- Write changelog before building.
- Fix headers for contacts + settings apps.
- Improve thread overlay styling.
- Make thread meta 50% opaque unless hovered/active.
- Split out window API views.
- Ensure default options on
openWindow
util. - Remove pre background color.
- Allow body scrolling.
- Remove unused method.
- Link to changelog/license on meta page.
- Create
MetaFileApp
to view bundled markdown files. - Add
linkify=True
kwarg tomarkdownify
util function. - Remove unncessary wrapper classes.
- Implement new welcome/onboarding page with account settings.
- Break out the account list into it's own component.
This release completely rebuilds the thread view, which now appears as a popover on top of all the columns/folders. This means it shows up consistently rather than jumping around the screen. This also enables an improved thread view and controls.
Changes:
- Add a debug traceback log on account connection tests.
- Add comment to support unicode SMTP usernames/passwords.
- Properly encode unicode IMAP usernames/passwords.
- Rebuild the thread view.
- Move green into less variable.
- Fix thread hashing by actually using the oldest email.
- Move logic for finding next/previous thread/column into util.
- Reset column store temporary hash sets on render.
- Fix
columnStore.hasHiddenThread
return value. - Tidy up readme bits.
- Add UI docs.
- Re-capture that keyerror when destroying a window.
- Fix saving window position/size on Linux/Windows.
- Upgrade pywebview and use the drag region functionality.
- Log the server host/port on start (debug).
- Formatting.
- Add
.node-version
file. - Remove leftover try/except.
- Log the settion token (debug).
- Improve new issues page.
Linux only release to fix opening links.
Changes:
- Inline variables when only used once.
- Fix open links on Linux.
- Add stale issue workflow.
Adds dropdown for all folders in sidebar with pin/unpin buttons.
Misc bugfixes (safer string handling, improved locking).
Changes:
- Fix cleaning * shell arguments.
- Run clean before starting a release.
- Use
decode_string
everywhere for safer decoding. - Properly raise after failing to connect to IMAP.
- Drop default connection attempts to 3.
- Add basic about/meta page.
- Fix for network header errors.
- Add missing key prop to show/hide all folders button.
- Split out header styles.
- Add copy debug info button to header errors.
- Limit store subscriptions to reduce email column renders.
- Load the list of folders on emails app start.
- Fix missing key error on request store lists.
- Better request store message when searching.
- Add
KANMAIL_DEBUG_LOCKS
environment variable. - Use an
RLock
for thread class locking. - Fix old setting migration (sidebar_folders should be a list).
- Add all folders to the sidebar w/ability to pin.
- Make module tidy ups.
- Add
make/release.py
shortcut script. - Move
make/clean.sh
->make/clean.py
.
Changes:
- Use zip files > git commits in base requirements.
- Tidy up Linux build Dockerfile.
- Set -ex in clean script.
- Link Linux docs.
- Update Linux docs with latest info.
- Include
libbz2
in the bundle (fix Fedora). - Tidy up Linux doc.
- Make Linux client script executable.
- Add Linux doc.
- Add
KANMAIL_APP_DIR
envvar override. - Fix adding a new account after autoconfig fails.
- Fixup build linux client docker script.
- Add
make/build_linux_client_docker.sh
script. - Implement hack to remove binaries from pyinstaller analysis.
- Remove
Makefile
and replace withmake/clean.sh
. - Remove extra binaries from spec as not needed.
- Pin mac/linux extra requirements.
- Remove commented staticx lines.
- Remove icons/themes from docker build image.
- Add
--onedir
argument to make scripts. - Add
client-linux-docker
make target that builds the Linux client using Docker. - Bundle required shared libraries in Linux.
Security & bugfix release.
Changes:
- Expunge emails after deleting them.
- Lock
Account.get_folder
to prevent race condition on folder create. - Tidy up
__str__
andlog
methods for account/folder/foldercache. - Add a session token to prevent CSRF attacks.
- Merge common error views.
- Highlight emails flagged as deleted.
- Apply new drag n' drop method to sidebar folders.
- Tidy up copy on move information.
- Don't attempt to parse single item tuples in bodystructure.
- Expand support doc information.
- Add copy not move information to providers doc.
- Create issue templates.
This release adds "copy on move" for better compatibility with label-style providers (Gmail, Fastmail beta).
Also brings in a much improved error display with more information to improve debugging, along with a bunch of fixes.
Changes:
- Add cache cleanup script.
- Add cache cleanup functions.
- Add
__str__
methods to folder items. - Extract cache key name into function.
- Better function name.
- Show traceback infomation in header errors, link to support doc.
- Include tracebacks for unexpected errors.
- Handle
copy_on_move
when dragging emails between columns. - Default
copy_on_move
true if we're gmail. - Add copy emails function to the base email store.
- Add
copy_on_move
setting. - Respect the
options.accountName
filter on sync emails. - Log a warning when trying to delete emails that don't exist.
- When moving emails rely on backend sync to update columns.
- Remove unused styles.
- Add
settingsStore.getAccountSettings
function. - Fix account settings default (array not object).
- Fix how we store mapping of account/folder/uid -> email.
- Make the spec template able to generate onedir pyinstaller bundles.
- Remove the dist changelog on
make clean
. - Remove upx.
- Move
MACOSX_DEPLOYMENT_TARGET
into settings. - Remove
--no-binary
flag as not required/working. - Update maintainer label in Dockerfile.
- Update Docker docs for kanmail user.
Changes:
- Symlink pip as well as python for macos build env.
- Use
MACOSX_DEPLOYMENT_TARGET
envvar when compiling. - Add pip install to MacOS build env.
- Fix header errors in contacts/settings.
- Better highlight new account form.
- Default enable SSL when autoconf fails.
- Fix adding new accounts after failed autoconf.
- Add button to skip new account form and go straight to IMAP/SMTP settings.
- Fix error display in contacts and expected API errors.
- Move
criticalRequestNonce
argument into options object. - Fix TOC link in providers.
- Add JavaScript requirement install to readme.
- Merge pull request #103 from jetmore/patch-1
- Update README.md
Building using MacOS 10.12 SDK.
Changes:
- Expand readme w/OS specific dev + build instructions.
- Move util functions into make util module.
- Expand providers doc.
- Build tidy up.
- Rename
SidebarHeader
->HeaderErrors
component and display in all windows. - Form style tweaks.
- Implement
ssl_verify_hostname=True
connection setting. - Better handle duplicate contacts on add/update.
- Don't update in-memory settings on save error.
- Refuse emails with no recipients.
- Add SSL verify hostname IMAP/SMTP settings checkboxes.
- Fix new blank email account selection and error handling on send button.
- Update new account link + text.
- Add providers doc link constant.
- Tidy settings save button render.
- Redo new contact form w/error handling.
- Merge pull request #95 from 0xflotus/patch-1
- fixed small error
- Update providers note on add new account form.
- Correct package.json license.
- Don't dump the output of docker inspect pre-releasing.
- Add
docker-release
make command. - Correct docker tag when building.
- Merge pull request #80 from Lerentis/master
- Correct license terminology (source available) - thank you HN!
- added Maintainer label and dropped privileges inside container
First release to include licensing. Also loads of bugs fixed :)
Changes:
- Tidy up license file handling to support multiple app tokens.
- Don't codesign/notarize unless making a release build.
- Readme tidy up.
- Improve docs/readme.
- Fix empty/loading column states.
- Hide overflowing text in contact list.
- Implement account specific icons.
- Return autoconf ports as integers.
- Move whether to save contacts into the folder class.
- Don't save contacts with " via " in the name.
- Fixup boot imports.
- Add message to abort in
get_or_400
. - Add wrappers around keyring functions and improve the naming.
- Rename device module -> update.
- Implement license key elements.
- Nice formatting for contact count.
- Add license info to the readme.
- Add license sidebar link + footer updates.
- Use default size for send windows.
- Use info log for post-process console message.
- Rename emailss app root element ID.
- Update screenshot.
- De-dupe validating no duplicate accounts.
- Use imap user + host to identify folder caches.
- Add default window width/height.
- Fix address count in column thread.
- Remove
UNSAFE_componentWillReceiveProps
code. - Use store functions to check thread hashes.
- Reset contact state after cancelling edit.
- New Mac/Win icons.
- Add new logo, add to readme titles.
- New colour palette and default pink.
- Tidy up address list rendering, add support for avatars.
- Docs improvements.
- Updated screenshot.
- Move technical docs into the readme.
- Expand some of the fake IMAP client functionality.
- Add website URL constant.
- Update constant names.
- Update yarn lockfile with less & upgraded dependencies.
- Upgrade less to v3.
- Bump pyupdater s3 plugin.
- Correct print statements in make.
- Add
release-complete
make job.
Changes:
- Add check for notarize envar on MacOS.
- Add entitlements.plist for MacOS codesigning.
- First pass implementation at MacOS notarization during build.
- Print and run > print and check output for docker inspect.
- Handle strip/decode in the util.
- Move
Dockerfile
to the top directory. - Replace scripts with a
Makefile
. - Swap
--build-only
for--release
so the default is build, not release. - Split
scripts/build_release.py
into a module undermake
.
Changes:
- Don't overwrite existing files when downloading attachments.
- After downloading an attachment, second click opens it (if possible).
- Remove pointless logging in requests util.
- Properly handle (ignore) invalid critical request responses in thread.
- Trigger thread store update when fetching.
- Actually pass back the data/error from request store responses.
- Revert "Reset the hidden/read thread caches on column stores when updating."
- Fixup missing/incorrect prop types.
- Reset the hidden/read thread caches on column stores when updating.
- Fix unsubscribe from store.
- Track/cache read threads in the column store.
- Set 30s timeout on sqlite to fix/reduce database lock exceptions.
- Make email columns only listen for
accountName
filter prop changes. - Make it possible to subscribe to individual store props.
- Fix key used to flag email threads as read.
- Reset state after adding a new account.
- Add
win32timezone
hidden import on Windows. - Rename
scripts/release.py
->scripts/build_release.py
. - Correct error data variables when adding a new account.
- Tidy up the add account process and error handling.
- Downgrade keyring to
19.2.0
and addkeyrings.alt
. - Add secrets module to setup keyring.
- Don't allow multiple accounts with the same name.
- Change settings
accounts
from a dict to a list. - Remove unnecessary
__future__
imports. - Install libssl + libffi.
- Remove stale settings doc.
- Move
arrayMove
intoutil/array.js
. - Add contacts in batches.
- Formatting.
- Flag whether changes have been made when fixing old settings.
- Correct window settings: (left -> x, top -> y).
- Re-save settings if we fix/migrate old formats.
- Fix batch get headers usage.
- Also capture
LoginError
in IMAP connection retries. - Put password back as an allowed connection kwarg.
- Debounce saving window settings.
- Don't trigger updates after thread delete.
- Add error view for missing password exception.
- Add a conversion for old in-settings-file passwords -> keyring.
- Get/set IMAP/SMTP passwords using keyring.
- Add keyring requirement.
- Properly reset all account classes on settings update.
- Fix folder initialisation checking whether a folder exists.
- Formatting.
- Use correct function:
pickBy
for objects (notfilter
). - Flag threads as hidden in the column store when moving.
- Add fix any old settings function.
- Fix incorrect check when validating settings keys with defaults.
- Formatting tidy up.
- Add logging to the folder cache and contacts modules.
- Separate contact validation into a function.
- Separate out settings constants.
Changes:
- Make the form on contacts page top sticky.
- Label copy tidy on settings.
- Only allow one contacts/settings window at once.
- Use more less variables.
- Turn the sidebar folder list into a proper multiselect in settings.
- Move react select styles into own file.
Big release with lots of changes; highlights:
- contact manager, less spammy contacts
- rebuild cache with increased performance/less disk write
- tidy up settings
- test/validate working with fastmail
Changes:
- Don't use save dialog (broken?) when downloading files.
- Remove unused view.
- Save copies of emails sent if the
save_sent_copies
setting is true. - Add
Date
header to emails. - Don't assume emails have dates.
- Remove unused
Folder.delete_messages
method. - Rename variable for explicitness.
- Don't store contacts w/o a name.
- Move actual sending of messages into account class.
- Rename
send.py
->message.py
. - Add
save_sent_copies
folder setting to the settings app. - Implement error handling on settings save failures.
- Rename
type
->method
in JS request util. - Ensure the settings app respects strict settings model.
- Implement a settings model with validation.
- Tidy up settings account edit.
- Redo account settings with tabs.
- Make it possible to rename accounts.
- Update readme w/fastmail tested.
- Add server support doc.
- Sort out the settings API: separate overwrite from update.
- Make
HeaderBar
reflect the header background style setting. - Return both name + email when selecting addresses in the send app.
- Use the
email.headerregistry
package for addresses. - Fix contact manager form styles.
- Remove sidebar borders.
- Implement & use batch get/set header functions for the folder cache.
- Modify save/delete cache methods to take multiple objects.
- Explicitly define pyupdater-s3-plugin requirement.
- Don't cache the folder ID.
- Offer to build JS bundle when building only.
- Reimplement the folder cache using sqlite.
- Enable foreign keys in sqlite.
- Fix folder pagination: don't mutate passed in UID list.
- Add
flake8-quotes
development requirement. - Update
add_contact
function usage. - Finish
ContactsApp
component. - Improve add contact bounce/noreply email detection.
- Add save/delete contact functions.
- Add
KANMAIL_DEBUG_SMTP
environment variable flag. - Finish contacts API views.
- Log settings errors as console errors, not log.
- Add contacts window/page with stub management methods.
- Fix send app loading of contact list.
- Remove borders from column styles.
- Add flask-sqlalchemy/sqlalchemy requirement.
- Save contacts using sqlite/sqlalchemy.
- Move form styles out of settings style.
- Don't wait indefinitely the server to start.
- Don't start monitor thread until after the server boots.
- Add/use
destroy_main_window
function. - Remove email borders.
- Don't save contacts from emails in spam/trash.
- Don't save window settings in server mode.
- Add Windows icon.
- Update werkzeug
ImmutableDict
import. - Capture/retry additional
ImapClientError
's. - Improve sidebar style of "update complete" text.
- Remove restart device api/util.
- Expand docker docs to include volume.
- Fix writing of changelog.
Changes:
- Add Python version @ 3.7.6.
- Make it possible to pass a version when building.
- Require building the JS bundle outside of the release script when building only.
- Reimplement tracking of seen email UIDs in the folder class.
- Fix z-index styles.
- Render custom sidebar folders in a separate list.
- Fix scroll handler errors when changing main column.
- Add frameless class when in frameless mode.
- Implement non-frameless styles.
- Only flag as frameless if we're in app mode (on MacOS).
- Pass frameless setting to the frontend.
- Fix offset correction when removing UIDs from a folder.
- Add Docker docs.
- Expand development instructions, add Windows notes.
- Build the client bundle once during a release.
- Handle Docker not having versioned folder for JS.
- Store the main JS file in a versioned directory.
- Windows build support!
- Create a github release after pushing new tag.
First release for Linux & Docker!
Changes:
- Bump
pyinstaller
andpyupdater
requirements. - Ensure we pass width/height as integers.
- Make it possible to drag n' drop emails into sidebar folders.
- Improve advanced settings block style.
- Add
sidebar_folders
setting. - Tweak save button for service/browser mode.
- Fix version to work with pyupdater.
- Show hover state when dragging emails between columns.
- Fix Kanmail link.
- Begin adding type annotations to the server.
- Linux & Docker build support!
- Proper support for running as a server.
Changes:
- Don't attempt to verify/fix UIDs returned when syncing flags (non-essential).
- Fix attempting to decode dodgy strings.
Changes:
- Fix window dialog creation (save/add attachments).
Changes:
- Capture and attempt to base64 decode line by line if full text is partial.
- Look at part
1.1
if1
doesn't exist (multipart excerpt support). - Strip style tags that contain background images.
- Remove background images in emails.
- Remove srcsets when replacing images w/buttons.
- Fix inline images by removing <> tag wraps.
Changes:
- Stop removal of UIDs on move/delete emails, handled by sync.
- Capture
ImapClientError
when checking if a folder exists. - Improve handling of select/unselect folder errors.
- Upgrade to pywebview 3, with some additions.
- Remove use of
six
+ requirement. - Expand the sycning docs.
- Add some basic syncing docs.
- Handle failed thread loading state.
- Ensure, on get folder emails, we always return.
- Fix indent.
- Make the archive/star/trash thread buttons nicer colours.
- Implement & undo
getDerivedStateFromProps
replacement forcomponentWillReceiveProps
. - Fix new account testing by providing an account name.
- Fix thread positioning with 4+ columns.
- Fix message meta/buttons being unclickable.
- Doesn't work because the webserver cannot open windows, ugh!
Changes:
- Improve backend network errors by including the account.
- Improve layout/styling of errors.
- Store new errors at the start of the lists.
- Re-add
clearNetworkErrors
function. - Implement full dev reloading.
Changes:
- Replace
Connection.connection
withConnection.config
. - Fix attribute access.
- Improve tracking+display of network/request errors.
- Use a
Lock
instead ofRLock
for class locking. - Overhaul connection logging and make logs consistent.
Changes:
- Split checking whether a folder exists from fetching UIDs.
- Implement left/right buttons on column header to re-order columns (excluding main).
Changes:
- Remove restart link as it still doesn't bloody work.
Changes:
- Add ping endpoint and don't create the main window until it responds.
- Import settings variables rather tha module.
- Consistent function names.
- Change the frontend to show a restart button on update download.
- Implement
restart_device
w/API endpoint.
Changes:
- Decode bytes values.
Changes:
- Decode all headers.
- Remove unused import.
Changes:
- Fix attachments missing.
Changes:
- Add all non-text/html objects as attachments.
- Include
X-Mailer
header in emails. - Remove floats in threads to fix layout.
- Add new yarn lockfile.
- Remove
parcel-bundler
dependency.
Changes:
- Fixup selecting a folder in IMAP connections.
- Render network erros in sidebar header.
- Store network errors (503) separately to other request errors.
Changes:
- Fix and tidy up trashing/archiving/moving of email threads.
- Fix IMAP connection retrys.
- Fix bug when trying to remove a message that doesn't exist.
- Fix fake boxy text (return string not list).
- Tidy up fake fetch key handling.
- Never disable the UID validity cache.
Changes:
- Ignore invalid keys when parsing
BODYSTRUCTURE
. - Fixup requirements for dodgy packages.
This version adds support for sending attachments and syncing email reads!
Changes:
- Fetch the first 1024 bytes of the body.
- Strip headers/duplicate lines when parsing excerpt.
- Fix downloading text files/content.
- Improve parsing of bodystructure attachments on Outlook.
- Implement sending attachments.
- Use
EmailMessage
(py3.6+) overMIMEMultipart
. - Only fix if we have UIDs.
- Ensure UID count is an integer.
- Restore the
PUT
update settings endpoint. - Add refresh button to email column header.
- Implement checking for read emails on the server.
- Re-add UID count checking on sync when moving between folders.
- Only sync unreads for the open main column.
- Prepare email stores to sync unreads.
- Move sync days out of advanced settings.
- When a thread is open and we receive an update, reload it and mark emails read.
- Don't assume we have content IDs/part headers.
- Improve error formatting.
- Default filenames to an empty list.
- Retry when IMAP server misses parts.
- Separate loading a thread from opening it, enabling reloads.
Changes:
- Add
/select-files
endpoint in prep for sending attachments. - Tidy up view methods.
- Fix reply quotes now we have both html+text emails.
Changes:
- Add untested Linux/Windows requirements.
- Ask where to save attachments to and reflect this in the UI.
- Add save/open dialog helpers to window module.
Changes:
- Raise the first of any exceptions when executing threaded functions.
- Only re-cache UIDs if changed.
- Capture/wrap IMAP connection errors and handle in error view.
- Get account capabilities on demand.
Changes:
- Provide feedback when updating and render the correct version.
- Return something from the update view.
- Don't auto restart after updating.
Changes:
- Huge improvement to parsing of
BODYSTRUCTURE
. - Add bust cache button to advanced settings.
- Add API to delete caches.
- Only bust cache if we had a UIDVALIDITY.
- Add
delete
method to requests util. - Hide advanced settings behind a toggle.
- Don't hide images included as attachments - only remote images.
- Fix bug in re-opening settings window.
- Up default undo ms to 5000.
- Add
sync_interval
setting.
Changes:
- Add a
--build-only
flag to the release script. - Use more appropriate exceptions in the release script.
- Include version number in the JS bundle.
- De-dupe view data.
Changes:
- Extend clean script to remove any incomplete builds/changelog.
- Properly prevent images from loading until explicitly allowed.
- Tidy up.
- Upgrade
pyupdater
and remove symlink hack. - Markdownify the text version of emails.
- Show both plaintext and HTML (default) versions of emails.
- Hide images by default with toggles to show.
Changes:
- Fix column meta clashes by tracking number of syncs/loads.
- Move email stores back inside stores folder.
- Fix syncing when UID validity has changed.
Changes:
- Limit the number of parallel requests executed via the
requestStore
. - Bump throttling of column scroll to 1000.
- Fix wrong variable when markdownifying text data.
- Fix create/destroy window issues.
- Make sure main/search email stores don't clash when updating loading icons.
Changes:
- Improve how column meta is handled by the email stores.
- Throttle onscroll loading of more emails.
- Implement message forwarding.
- When UID validity changes - don't fetch all messages at once!
- Return both HTML and plaintext when fetching email texts.
- Improve order of methods on
Folder
. - On changing
system.sync_days
setting, bust UID list caches and account folders. - Add
reload_main_window
function to window module. - Add
reset
method toAccount
and function to reset all accounts. - Add function to bust all UID list caches.
- Add missing return on close window view.
- Move all
IS_APP
window controls to the window module. - Separate UID validity caching from UID lists.
- Return a list of changed keys when updating settings.
- Add sync days to settings.
- Add default
sync_days
value (0 for all). - Ensure the app/cache directories exist before setting up logging.
- Remove old static directory data from build script.
- Include pyupdater s3 extras.
- Pass signals to the executable not bootloader.
- Update dev requirements.
Changes:
- Use the new close window API instead of
window.close
. - Run
sys.exit
after main window close. - Implement close window API (
window.close
no longer works). - Add development requirements.
- Tuples > lists.
- Linting.
- Upgrade to pywebview 2.4 (ish).
- Don't render threads over the sidebar.
- Fix window width variable (new webkit changes).
- Tidy up/sort base requirements.
- Fix pyupdater broken dependency.
- Add missing fonts:
roboto
androboto-slab
. - Move
static
->fonts
.
This version is the first to be tested with Outlook, and includes a number of related fixes.
Additionally emails are now moved between folders as you would expect, rather than a mix of copy & move.
Changes:
- Better handle different mail servers when parsing bodystructure.
- Fix folder refresh and running w/o cache.
- Correct call to get IMAP connection.
- Reimplement
Folder.reset
and handlingFolder.exists
. - Add tls checkbox to the account settings component.
- Always set ssl/tls during autoconf.
- Improve the connection debug logs.
- Change to move emails between columns.
- Always move emails, don't copy between folders.
- Remove the link between main column and others.
Changes:
- Fix replying to emails sending from the wrong account.
Changes:
- Ensure threads in the folder columns do not appear in the main column.
This version brings aliases/addresses in the account settings.
Changes:
- Filter out empty contacts.
- Add address/contact management to the settings app.
- Formatting.
- De-dupe wide/half/quarter/etc styles.
- Add proper support for contacts in settings.
Changes:
- Add error state to the send window/button.
- Improve performance of the contact multi-selects.
- Improve send window styles/consistency.
Changes:
- Open the previous thread if there's no next thread.
- Make
get_parts
on the folder cache work if the headers don't exist. - Handle/ignore dodgy contacts cache.
- Add hover state to threads w/error.
Changes:
- Noop when drag + drop to the same column.
- Better wrapper for email content.
- Don't prepend
Re:
if the email subject already starts.
Changes:
- Properly handle plain text email content.
Changes:
- Finish setting up the new editor.
- Update yarn lock.
- Switch out
react-wysiwyg
forreact-quill
. - You don't actually put the Bcc list in the email!
Changes:
- Update dev docs.
- Add
--onefile
to build script. - Make search useful:
- Link the alert icon to reload when we encounter JS/backend errors.
- Update docs.
Changes:
- Add gmail app password info.
- Fix password input on account.
- Delete columns, icon on header meta hover.
- Validate settings values.
- Remove sync days from frontend as it's slower that fetching all, add danger zone icon/text to sync settings area.
- Fix sending emails by using SMTP username as from address (until accounts have addresses).
Changes:
- Handle DNS failures properly in autoconf.
- Simplify the error page (message is useless).
This version brings a full settings UI so there's no need to manually edit the JSON file.
Changes:
- Add flake8 and autoconfigure requirements.
- Formatting.
- Add
put
function and expand error handling to pass any data back from the server. - Only allow one settings window open at once.
- Implement the settings app w/account add/remove and autoconfiguration!
- Add autoconf module to attempt to autoconfigure IMAP/SMTP settings.
- Add SMTP connection wrapper similar to the IMAP wrapper.
- Don't cache query folder UIDs.
- Don't alter account name.
- Add
sync_days
system setting. - Format the folder message count.
- Set proper destination for changelog/license bundling.
- Fix search.
Changes:
- Make the add column button usable.
- Handle null ref on the main column.
- Remove old prop type.
- Settings defaults.
- Add a screenshot!
- Use
Faker
for the fake imap. - Remove unused function.
- Add settings docs and link to latest release.
- Improve release script changelog handling.
- Tidy up changelog/versions.
- Bump package versions.
- POST device ID & version to license server.
- Debug log when opening windows.
- Use
gnu-tar
rather than MacOStar
to avoid bundling extended attribute files.
Changes:
- Don't assume the version file exists (non-release builds).
- Finish up release script and add new build/clean shortcut scripts.
- A test release
Changes:
- Better logging when version checking.
- Full stop changelog message.
- Update build script to always use
pyupdater
. - Accept
KANMAIL_UPDATE_SERVER
andKANMAIL_LICENSE_SERVER
envars in debug. - Default loggers to WARN.
- Welcome to the Kanmail v1 changelog