# Nylas Mail Changelog

### 2.0.15 (4/17/2017)

  + Correctly handle and inform users about database malformed errors that can
    occur both in main process and/or window processes

### 2.0.14 (4/14/2017)

- Fixes:
  + Prevent from adding duplicate accounts and sync workers due to account id changes
  + Correctly remove sync worker reference when destroying it
  + Correctly initialize SyncProcessManager with Identity
  + Fix contact ranking runtime error

### 2.0.13 (4/13/2017)

- Fixes:
  + Upload nupkg with correct name for win32 autoupdater to work
  + Correctly handle window.unhandledrejection events

### 2.0.12 (4/13/2017)

- Fixes:
  + Prevent NM from overwriting N1 binary on windows
  + Fix runtime error in sync process
  + Prevent old N1 config from getting wiped when installing Nylas Mail

- Development:
  + Remove useless docs

### 2.0.11 (4/12/2017)

- Fixes:
  + Dispose of mail listener connection before getting new one. This will
    prevent sync process from leaking Imap connections and getting stuck.
  + Fix performance regression when polling for gmail attribute changes
  + Don't double report unhandled rejections
  + Fix unhandled rejection handling (fix ipc parse error)
  + Fix regression when processing messages under a transaction
  + Rate limit database malformed error reports to sentry

### 2.0.10 (4/11/2017)

- Fixes:
  + Fix missing UID error when archiving threads after sending
  + Ensure all mail folder exists before trying to access it
  + Fix SyncbackMetadataTask dependency

- Development:
  + Don't report stuck sync processes to Sentry
  + MessageFactory -> MessageUtils, SendUtils -> ModelUtils

### 2.0.9 (4/11/2017)

- Features:
  + Re-add imap to the onboarding accounts page

- Fixes:
  + Correctly detect changes in labels, starred and unread for Gmail accounts
  + Fix delta streaming connection retries
  + Handle weird MIME edge case with @ symbol

- Performance:
  + Wrap message processing in transaction for better performance
  + Increase sqlite `page_size` and `cache_size`

- Cloud:
  + Improve performance of reminders worker
  + Add DataDog StatsD for heartbeats
  + Restart automatically on unhandeld rejections

- Development:
  + Add benchmark mode

### 2.0.8 (4/7/2017)

- Fixes:
  + Revamp SSL options during authentication to be able to properly auth against
    SMTP and prevent sending failures
  + Ensure IMAPConnnectionPool uses updated account credentials
  + Always fetch and update identity regardless of environment
  + Properly handle serialization errors for JSON columns in database

- Cloud:
  + Switch MySQL charset to utf8mb4
  + Add exponential backoff for cloud worker jobs when encountering errors
  + Use IMAP connection pool in cloud workers to limit number of connections
  + Properly generate metadata deltas when clearing expiration field
  + Increment default imap connection socket timeout in cloud workers

- Plugins:
  + Correctly syncback metadata for send later
  + Delete drafts after they are sent later
  + Correctly ensure messages in sent folder for send later in gmail
  + Fix send reminders version conflict error
  + Correctly set metadata values for send reminders
  + Fix imap folder names in send-reminders
  + Fix send later access token refresh

- Development:
  + Add view of CloudJobs in n1.nylas.com/admin
  + Ensure daily script grabs current version after pulling latest changes

### 2.0.1 (4/5/2017)

- Features:
  + Limit search to focused perspective

- Fixes:
  + IMAPConnectionPool now correctly disposes connections
  + Ensure we use refreshed access token for all imap connections during sync
  + Prevent IMAP connection leaking in sync worker
  + Fix send later button saving state and sending action
  + Fix inline images for send later
  + Correctly enable plugins on 2.0.1
  + Make sure app can update even after signing out of NylasID
  + Don't make any requests when NylasID isn't present

- Cloud:
  + Make cloud workers more robust
  + Remove old SignalFX reporter & add docs
  + Log errors according to bunyan specs

- Development:
  + Add script to run benchmarks once per day at specified time
  + Add script to upload benchmark data to Google Sheets
  + Add better logging when restarting stuck sync worker

### 2.0.0 (4/4/2017)

Introducing Nylas Mail Pro

- Features:
  + Enable snooze, send later, and send reminders
  + Add feature limits to reminders and send later

- Fixes
  + Don't assign duplicate folder roles
  + Re-setup IdentityStore in new window

- Development:
  + Fix sqlite build for older versions of clang
  + Remove rogue scripts-tmp folder
  + Remove unecessary db setup for mail rules

### 1.0.55 (3/31/2017)

- Fixes
  + Ensure open/link tracking work when sending multiple consecutive emails
  + Fix performance of contact rankings database query
  + Fix performance of thread search index database queries
  + Fix performance of ANALYZE queries

### 1.0.54 (3/31/2017)

- Features:
  + Add search support for `has:attachment`

- Fixes:
  + Reduce database thrashing caused by thread search indexing
  + Interrupt long-running syncback tasks
  + Fix performance of contact rankings db query
  + Don't hit contact rankings endpoint until account is ready
  + Ensure sync worker is stopped correctly when removing accounts or when
    restarting it

- Metrics:
  + Report metrics about SyncbackTask runs

- Perf:
  + Delay building new hot window to improve win perf

- Development:
  + Add script to benchmarks new commits
  + Add DEBUG flag to be able to log all query activity for both databases
  + Add `DatabaseStore.write` which doesn't use Transactions
  + Metadata test fixes

### 1.0.52 (3/29/2017)

- Fixes:
  + Fix open and link tracking:
    + No longer triggers your own opens & link clicks
    + Link tracking indicator is now always present in sent messages
  + Fix regression in DB query execution which would delay all queries in the
    system.
  + Reduce max retry backoff for DB queries, which could hold a query open for
    too long
  + Fix thread reindexing issues, which should help performance and correctly
    index threads for search
  + Fix `in:` search syntax for non-gmail search
  + Fix references to RetryableError imports

- Development:
  + Add initial sync benchmarking script
  + Clean up logging in DatabaseStore: differentiate background queries from
    regular queries in the logs, only log queries that actually take more than
    100ms.
  + Point the billing server URL to staging by default for easier development,
    and allow it to be overriden
  + Add index to expiration field on Metadata

### 1.0.51 (3/28/2017)

- Features:
  + Restore contact rankings feature for better contact predictions in composer
    recipient fields

- Fixes:
  + Correctly listen for new mail in between sync loops
  + Verify SMTP credentials in /auth endpoint
  + Also prioritize sent label for initial Gmail sync
  + Properly relaunch windows on autoupdate
  + Properly set up local /health endpoint by making sure to attach route files
    ending in .es6 to local-api

- Perf:
  + Don't throttle while syncing first 500 threads

- Metrics:
  + Report battery state changes to Mixpanel

- Development:
  + Make deploy-it say what it's doing instead of hanging silently
  + Make deploy-it print link to the EB console
  + Make help message better on deploy-it
  + Add `SHOW_HOT_WINDOW` env for prod debugging of window launches
  + Correctly ignore `node_modules` in .ebignore for faster deploys
  + Only bootstrap specific pkgs in postinstall for faster npm installs

### 1.0.50 (3/28/2017)

- Fixes:
  + Fix SyncActivity errors introduced in 1.0.49

### 1.0.49 (3/27/2017)

- Fixes:
  + Ensure sync process does not get stuck
  + Ensure the worker window is always available
  + Retry database operations when encountering locking issues

- Metrics:
  + Detect and report when the worker window is unavailable
  + Detect and report when a sync process is stuck

- Development:
  + Windows autoupdater fixes
  + Add better documentation for windows autoupdater
  + Remap windows dev shortcuts to match the ones used on darwin and linux
  + When building app, only re-install for optional dependencies on darwin

- Cloud:
  + Timeout streaming API connections every 15 minutes
  + Add missing database indexes from SQL review

### 1.0.48 (3/27/2017)

- Fixes:
  + Reindex threads when they're updated
  + Don't try to restart sync on every IdentityStore change
  + Correctly remove inline images with x button

### 1.0.47 (3/23/2017)

- Fixes:
  + Report hard crashes using Electron's built-in crash reporter

- Development:
  + Don't handle IMAP timeouts in the connection pool
  + Record file download times

### 1.0.46 (3/22/2017)

- Fixes:
  + Ensure files get transferred in forwarded messages
  + Correctly sign out of NylasID
  + Don't report non-reportable errors in delta connection
  + Fix S3 attachment upload for send later

- Development:
  + Rename downloadDataForFile(s) -> getDownloadDataForFile(s)
  + Switch type of Metadata value column
  + Fix build condition
  + Fix DraftFactory specs
  + Refactor sync worker IMAPConnectionPool callbacks

### 1.0.45 (3/21/2017)

- Fixes:
  + Correctly report unhandled errors caught in window.
  + Fix passing cursor to delta streams

### 1.0.44 (3/20/2017)

- Fixes:
  + Add error handling when creating syncback requests
  + Fix path for tmp dir in daily script

### 1.0.43 (3/17/2017)

- Fixes:

 + Revert nodemailer to previous version
 + Creating a folder no longer creates a non-existent duplicate subfolder
 + Don't bump threads to the top of list when a message is sent: only update lastReceivedDate if the message was actually received

### 1.0.42 (3/16/2017)

- Fixes:
 + Fix spellchecker regression (Don't exclude source maps in build)

### 1.0.41 (3/16/2017)

- Development:
  + Upgrade nodemailer to latest version

### 1.0.40 (3/15/2017)

- Features:
  + Add support for attachments in send later

- Development:
  + Improve build time
  + Windows Autoupdater fixes

### 1.0.39 (3/14/2017)

- Fixes:
  + Fix missing depedency for imap-provider-settings

- Development:
  + Only upload 7 characters of the commit hash for Windows build

### 1.0.38 (3/13/2017)

- Fixes:
 + Restart sync when computer awakes from sleep
 + Fix issue that made users log out of NylasID, restart, and then force them to log out and restart again in a loop (#3325)
 + Don't start sync or delta connections without an identity

- Development:
 + Restore windows build
 + Remove specs from production build
 + Fix arc lint
 + Specify Content-Type in developer bar curl commands

### 1.0.37 (3/10/2017)

- Fixes:
  + Fix regression introduced in 1.0.36 in the message processor
  + Correctly show auth error when we can't connect to n1cloud
  + Fix error thrown sometimes when handling send errors

### 1.0.36 (3/10/2017)

- Fixes:
  + Increase the IMAP connection pool size
  + Shim sequelize to timeout after 1 minute on every database operation. This
    is a safeguard to prevent unresolved db promises from halting the sync loop.
  + Better error handling to prevent the message processor from halting sync

- Development:
  + Measure and report inline composer open times
  + Refactor MessageProcessor to be more robust to errors

### 1.0.35 (3/9/2017)

- Fixes:
  + Make sure delta connection is restarted when an account is re-authed
  + More defensive error handling to prevent sync from halting
  + Prevent delta streaming connection from retrying too much
  + Fix error when attempting to report a fetch id error
  + Prevent  error restart loop when database is malformed
  + Correctly cancel search when the search perspective is cleared
  + When many search results are returned from the server, don't try to sync them all at once, otherwise would slow down the main sync process.
  + When restarting the app, don't try to continue syncing search results from an old search

- Development:
  + Consolidate delta connection stores, remove `internal_package/deltas`
  + Rename NylasSyncStatusStore to FolderSyncProgressStore
  + Consolidate APIError status code that we should not report
  + Don't report incorrect username or password to Sentry
  + Rate limit error reporting for message processing errors
  + Fix circular reference error when reporting errors
  + Refactor file download IMAPConnectionPool usage
  + Don't focus the Console tab in dev tools every time an error is logged
  + Correctly set process title

### 1.0.34 (3/8/2017)

- Fixes:
  + Sync should not get stuck anymore due to sequelize
  + Delta Streaming connections now correctly retry after they are closed or an error occurs
  + Handle errors when opening imap box correctly

- Development:
  + Add script/daily
  + Provide better info to Sentry on sending errors
  + Refactor and clean up delta streaming code
  + Refactor message processing throttling

### 1.0.33 (3/8/2017)

- Features:

  + Add intitial support for send later

- Fixes:

  + Fetch unknown message uids returned in search results
  + Don't throttle message processing when syncing specific UIDs

- Development:

  + Better grouping for APIError by URL also
  + Don't generate sourceMapCache in prod mode
  + Upload a next-version to S3 for autoupdate testing
  + Windows build fixes

### 1.0.32 (3/7/2017)

- Development:

  + Report provider when reporting remove-from-threads-from-list
  + Report provider when reporting send perf metrics

### 1.0.31 (3/6/2017)

- Fixes:

  + Improve initial sync speed by scaling number of messages synced based on
    folder SELECT duration
  + Immediately restore sync process when app comes back online after being
    disconnected from the internet.
  + Can now reply from within notifications again

- Development:

  + Add basic rate limiting to Sentry
  + Report all search performance metrics
  + Prevent noisy uncaught errors when closing long connection
  + Improve reporting of refresh access token errors
  + Don't double report refresh access token API errors
  + Replace `setImmediate` with `setTimeout` as Promise scheduler
  + Use new Bluebird preferred `longStackTraces` syntax
  + NylasAPIRequest refactored and cleaned up
  + Search refactors and improvements
  + Protect from operating on IMAP connection while opening a box
  + Enable logging in prod builds
  + Make deploy-it support -h/--help
  + Restore cloud testing environments

### 1.0.30 (2/28/2017)

- Fixes:

  + Can properly add signatures and select them as default for different
    accounts.
  + Can now correctly reply to a thread and immediately archive it or move it to
    another folder without throwing an error (#3290)
  + Correctly fix IMAP connection timeout issues (#3232)
  + Nylas Mail no longer opens an increasing number of IMAP connections which
    caused some users to reach IMAP server connection limits (#3228)
  + Fix memory leak while syncing which caused sync process to restart
    sometimes.
  + Correctly handle IMAP connections ending unexpectedly
  + Correctly detect retryable IMAP errors during sync + detect more
    retryable errors
  + Correctly catch more authentication errors when sending
  + Improve speed of processing messages during sync
  + Prevent unnecessary re-renders of the thread list

- Development:

  + Report performance metrics
  + More Coffeescript to Javascript conversions

### 1.0.29 (2/21/2017)

- Fixes:

  + You can now click inline images in messages to open them
  + More IMAP errors have been identified as retryable, which means users will
    see less errors when syncing an account
  + Improve performance of thread search indexing queries
  + Correctly catch Invalid Login errors when sending

- Development:

  + Developer bar in Worker window now shows single delta connection
  + More code converted to Javascript

### 1.0.28 (2/16/2017)

- Fixes:

  + Fix offline notification bug that caused api outage
  + We now properly handle gmail auth token errors in the middle of the sync loop. This means less red boxes for users!
  + Less battery usage when initial sync has completed!
  + No more errors when saving sent messages to sent folders (`auth or accountId` errors)
  + No more `Lingering tasks in progress marked as failed errors`
  + Syncback tasks will continue retrying even after closing app
  + Syncback tasks retry more aggressively
  + Detect more offline errors when sending, sending is more reliable
  + Imap connection pooling (yet to land)
  + More retryable IMAP errors, means less red boxes for users
  + Offline notification now shows itself when we’re actually offline, shows countdown for next reconnect attempt

- Development:

  + More tests
  + Don't use breadcrumbs in dev mode
  + Add a better reason when waking sync for syncback in the logs
  + BackoffScheduler, BatteryManager added for reusability

### 1.0.27 (2/14/17)

- Fixes:

  + Offline notification fixes

### 1.0.26 (2/10/17)

- Fixes:

  + Downloads retry if they fail
  + NylasID doesn't intermittently log out or throw errors
  + Fix initial sync for Inbox Zero Gmail accounts

### 1.0.25 (2/10/17)

- Fixes:

  + When replying to a thread, properly add it to the sent folder

- Development:

  + Can now once again run Nylas Mail test suite

### 1.0.24 (2/9/17)

- Fixes:

  + Fix error reporter when reporting an error without an identity (this would
    crash the app)

- Development:

  + Fix logging inside local-sync api requests
  + Stop reporting handled API errors to Sentry
  + Report thread-list perf metrics

### 1.0.23 (2/8/17)

- Fixes:

  + Fix emails occasionally being sent with an incomplete body (#3269)
  + Correctly thread messages together when open/link tracking is enabled
  + Fix `Mailbox does not exist` error for iCloud users (#3253)
  + When adding account, correctly remove whitespace from emails
  + Fix link in update notification to point to latest changelog

- Performance:

  + Thread list actions no longer sporadically lag for ~1sec (this is especially
    noticeable when many accounts have been added)
  + No longer slow down sync process when more than 100,000 threads have been synced

- Development:

  + Better logging in worker window
  + You can now run a development build of Nylas Mail alongside a production
    build

### 1.0.22 (2/7/17)

- Fixes:

  + New mail notification sounds on startup are combined when multiple new messages have arrived
  + You can now correctly select threads using `cmd` and `shift`
  + Improve message fetching by making sure we always fetch the most recent
    messages first.
  + Improve IMAP connection timeouts by incrementing the socket timeout (#3232)
  + When adding a Google account, make sure to show the Account Chooser

- Development:

  + Nylas Identity is no longer stored in config.json

### 1.0.21 (2/3/17)

- Fixes:

  + Fixed an issue where Nylas Mail could delete all accounts (addresses #3231)
  + Correctly delete and archive threads when they contain sent messages (addresses #2706)
  + Improve performance and prevent crashes when running several sync actions
  + Improve error handling when sync actions fail
  + Fix JSON serialization issue which could cause sync process to error.

### 1.0.20 (2/1/17)

- Fixes:

  + Properly clean up broken replies

### 1.0.19 (1/31/17)

- Fixes:

  + Replies on threads won't create duplicate-looking emails. This began
    to happen on midnight February 1 UTC due to a date parsing bug
  + Improve error handling in sync
  + Better retrying of certain syncback actions

- Development:

  + Now using Electron 1.4.15

### 1.0.18 (1/30/17)

- Performance:

  + 60% reduction of CPU usage during initial sync due to optimizing
    unnecessary rendering

- Fixes:

  + New composer stays in "to" field when initially typing

- Development:

  + Better documentation for Nylas Mail SDKs
  + GitHub repository renamed from nylas/N1 to nylas/nylas-mail
  + `master` branch now has Nylas Mail (1.0.x)
  + `n1-pro` branch now has Nylas Pro (1.5.x)

### 1.0.17 (1/27/17)

- Fixes:

  + Fix send and archive: Can now archive after sending without errors
  + Local search now includes more thread results
  + Contact autocomplete in composer participant fields now includes more results

### 1.0.16 (1/27/17)

- Performance:

  + Improved typing performance in the composer, especially with
    misspelled words

- Fixes:

  + Nylas Mail plugins install properly
  + Fix undo and occasional archive & move tasks failing due to not having uids
  + Fix logging for auth
  + Properly clean up after file downloads
  + Properly recover from IMAP uid invalidity

### 1.0.15 (1/25/17)

- Features:

  + Improve CPU performance of idle windows

- Fixes:

  + Correctly detect initial battery status for throttling.
  + Correctly allow auth for Custom IMAP accounts only #3185

### 1.0.14 (1/25/17)

- Features:

  + Improved spellchecker

- Fixes:

  + Correctly update attributes like starred and unread when syncing folders.
    Marking as read or starred will no longer bounce back.
  + Correctly detect new mail while syncing Gmail inbox.

### 1.0.13 (1/25/17)

- Fixes:

  + Messages immediately appear in sent folder. No bouncing back.
  + Login more likely to succeed. Waits longer for IMAP
  + Doesn't allow invalid form submission
  + Correctly handles token refresh failing
  + Auto updater says "Nylas Mail" properly
  + Sync drafts correctly on Gmail

- Development:

  + Local sync account API deprecated
  + Silence noisy queries in the logs

### 1.0.12 (1/24/17)

- Features:

  + New 'Debug' sync button that opens up the console
  + Faster search
  + Message processing now throttles when on battery
  + Analytics for change mail tasks

- Fixes:

  + Archive, Mark as Unread, and Move to trash don't "bounce back"
  + Adding a new account is now smoother
  + Improved threading
  + Drafts are no longer in the inbox

### 1.0.11 (1/19/17)

- Features:

  + Nylas Mail's installer on Mac uses a DMG

- Fixes:

  + Fixed app being occasionally unresponsive
  + Decreased odds of failed logins (by bumping connection timeout value)
  + Sync erroring notification no longer tripped by timeouts

### 1.0.10 (1/19/17)

- Features:

  + "Contact Support" button now auto-fills information
  + Actions reach providers faster

- Fixes:

  + Show errors on the GMail auth screen
  + Show draft sending errors
  + Can now correctly search threads via `from:` and `to:`
  + Other error management improvements
  + The database will now be reset if malformed
  + Improve the offline notification

- Development:

  + Update Thread indexing
  + Add loadFromColumm option to Attribute

### 1.0.9 (1/17/17)

- Fixes:

  + All Fastmail domains now use the correct credentials
  + Offline notification more reliable
  + Fix error logging

### 1.0.8 (1/17/17)

- Introducing Nylas Mail Basic! Read more about it [here](https://blog.nylas.com/nylas-mail-is-now-free-8350d6a1044d)
