34 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
1.0.0-beta - 2024-01-01
Few major concepts changed:
- The concept of Backend and Sender changed. The Sender does not exist anymore (it is now a backend feature). A Backend is now a set of features like add folders, list envelopes or send raw message. The backend of every single feature can be customized in the configuration file, which gives users more flexibility. Here the list of backend features that can be customized:
backend
(required): the backend used by default by all backend features (maildir
,imap
ornotmuch
)folder.add.backend
: override the backend used for creating folders (maildir
,imap
ornotmuch
)folder.list.backend
: override the backend used for listing folders (maildir
,imap
ornotmuch
)folder.expunge.backend
: override the backend used for expunging folders (maildir
,imap
ornotmuch
)folder.purge.backend
: override the backend used for purging folders (maildir
,imap
ornotmuch
)folder.delete.backend
: override the backend used for deleting folders (maildir
,imap
ornotmuch
)envelope.list.backend
: override the backend used for listing envelopes (maildir
,imap
ornotmuch
)envelope.get.backend
: override the backend used for getting envelopes (maildir
,imap
ornotmuch
)envelope.watch.backend
: override the backend used for watching envelopes (maildir
,imap
ornotmuch
)flag.add.backend
: override the backend used for adding flags (maildir
,imap
ornotmuch
)flag.set.backend
: override the backend used for setting flags (maildir
,imap
ornotmuch
)flag.remove.backend
: override the backend used for removing flags (maildir
,imap
ornotmuch
)message.send.backend
(required): override the backend used for sending messages (sendmail
orsmtp
)message.read.backend
: override the backend used for reading messages (maildir
,imap
ornotmuch
)message.write.backend
: override the backend used for adding flags (maildir
,imap
ornotmuch
)message.copy.backend
: override the backend used for copying messages (maildir
,imap
ornotmuch
)message.move.backend
: override the backend used for moving messages (maildir
,imap
ornotmuch
)
- The CLI API changed: every command is now prefixed by its domain following the format
himalaya <domain> <action>
. List of domain available by runninghimalaya -h
and list of actions for a domain by runninghimalaya <domain> -h
. - TOML configuration file options use now the dot notation rather than the dash notation. For example,
folder-listing-page-size
becamefolder.list.page-size
. See the changed section below for more details.
Added
- Added cargo feature
maildir
(not plugged yet). - Added cargo feature
sendmail
(not plugged yet). - Added watch hooks
envelope.watch.received
(when a new envelope is received) andenvelope.watch.any
(for any other event related to envelopes). A watch hook can be:-
A shell command:
envelope.watch.any.cmd = "mbsync -a"
-
A system notification:
envelope.watch.received.notify.summary = "📬 New message from {sender}"
: customize the notification summary (title)envelope.watch.received.notify.body = "{subject}"
: customize the notification body (content)
Available placeholders: id, subject, sender, sender.name, sender.address, recipient, recipient.name, recipient.address.
-
- Added watch support for Maildir backend features.
Changed
- Renamed cargo feature
imap-backend
→imap
. - Renamed cargo feature
notmuch-backend
→notmuch
. - Renamed cargo feature
smtp-sender
→smtp
. - Changed the goal of the config option
backend
: it is now the default backend used for all backend features. Valid backends:imap
,maildir
,notmuch
. - Moved
folder-aliases
config option tofolder.alias(es)
. - Moved
folder-listing-page-size
config option tofolder.list.page-size
. - Moved
email-listing-page-size
config option toenvelope.list.page-size
. - Moved
email-listing-datetime-fmt
config option toenvelope.list.datetime-fmt
. - Moved
email-listing-datetime-local-tz
config option toenvelope.list.datetime-local-tz
. - Moved
email-reading-headers
config option tomessage.read.headers
. - Moved
email-reading-format
config option tomessage.read.format
. - Moved
email-writing-headers
config option tomessage.write.headers
. - Move
email-sending-save-copy
config option tomessage.send.save-copy
. - Move
email-hooks.pre-send
config option tomessage.send.pre-hook
. - Moved
sync
config option tosync.enable
. - Moved
sync-dir
config option tosync.dir
. - Moved
sync-folders-strategy
config option tosync.strategy
. - Moved
maildir-*
config options tomaildir.*
. - Moved
imap-*
config options toimap.*
. - Moved
notmuch-*
config options tonotmuch.*
. - Moved
sendmail-*
config options tosendmail.*
. - Moved
smtp-*
config options tosmtp.*
. - Replaced options
imap-ssl
,imap-starttls
andimap-insecure
byimap.encryption
:imap.encryption = "tls" | true
: use required encryption (SSL/TLS)imap.encryption = "start-tls"
: use opportunistic encryption (StartTLS)imap.encryption = "none" | false
: do not use any encryption
- Replaced options
smtp-ssl
,smtp-starttls
andsmtp-insecure
bysmtp.encryption
:smtp.encryption = "tls" | true
: use required encryption (SSL/TLS)smtp.encryption = "start-tls"
: use opportunistic encryption (StartTLS)smtp.encryption = "none" | false
: do not use any encryption
Removed
- Disabled temporarily the
notmuch
backend because it needs to be refactored using the backend features system (it should be reimplemented soon). - Disabled temporarily the
search
andsort
command because they need to be refactored, see #39. - Removed the
notify
command (replaced by the newwatch
command). - Removed all global options except for
display-name
,signature
,signature-delim
anddownloads-dir
.
0.9.0 - 2023-08-28
Added
- Added 3 new cargo features:
pgp-commands
: enables the commands PGP backend (enabled by default, same behaviour as before)pgp-gpg
: enables the GPG backend (requires thegpgme
lib on the system)pgp-native
: enables the native PGP backend
- Added account configuration
pgp
to configure the way PGP operations are performed.
Changed
- Moved
email-writing-encrypt-cmd
topgp.encrypt-cmd
. - Moved
email-reading-decrypt-cmd
topgp-decrypt-cmd
. - Moved
email-writing-sign-cmd
topgp.sign-cmd
. - Moved
email-reading-verify-cmd
topgp.verify-cmd
.
0.8.4 - 2023-07-18
Fixed
- Fixed windows releases due to cargo deps typo.
0.8.3 - 2023-07-18
Fixed
- Fixed windows releases due to
coredump
crate compilation error. - Fixed macos releases due to macos 12 System Integrity Protection.
0.8.2 - 2023-07-18
Changed
- Made the code async using the tokio async runtime.
- On Linux, made the kernel keyring the default one (the one based on keyutils).
Fixed
- Fixed the way folder aliases are resolved. In some case, aliases were resolved CLI side and lib side, which led to alias errors sourcehut#95.
0.8.1 - 2023-06-15
Added
- Implemented OAuth 2.0 refresh token flow for IMAP and SMTP, which means that access tokens are now automatically refreshed and is transparent for users.
- Added
imap-oauth2-redirect-host
andsmtp-oauth2-redirect-host
options to customize the redirect server host name (default:localhost
). - Added
imap-oauth2-redirect-port
andsmtp-oauth2-redirect-port
options to customize the redirect server port (default:9999
). - Added
email-listing-datetime-fmt
to customize envelopes datetime format. See format spec here. - Added
email-listing-local-datetime
to transform envelopes datetime's timezone to the user's local one. For example, if the user's local is set toUTC
, the envelope date2023-06-15T09:00:00+02:00
becomes2023-06-15T07:00:00-00:00
.
Fixed
- Fixed missing
<
and>
aroundMessage-ID
andIn-Reply-To
headers.
0.8.0 - 2023-06-03
Added
- Added keyring support, which means Himalaya can now use your system's global keyring to get/set sensitive data like passwords or tokens.
- Added required IMAP option
imap-auth
and SMTP optionsmtp-auth
. Possible values:passwd
,oauth2
. - Added OAuth 2.0 support for IMAP and SMTP.
- Added passwords and OAuth 2.0 configuration via the wizard.
- Added
email-sending-save-copy
option to control whenever a copy of any sent email should be saved in thesent
folder defined infolder-aliases
. - Imported id mapper from the lib, which means that the id mapping is now done by the CLI.
- Added
BackendConfig
toAccountConfig::backend
to match sender implementation. - Added support for pipeline commands, which means commands can be either a single command (string) or piped commands (list of strings). It applies for:
email-writing-verify-cmd
email-writing-decrypt-cmd
email-writing-sign-cmd
email-writing-encrypt-cmd
Changed
-
Changed release archive extensions from
.tar.gz
to.tgz
. -
Moved
wizard
module into domains (config, account, backend…). -
[BREAKING] Changed the way secrets are managed. A secret is a sensitive data like passwords or tokens. There is 3 possible ways to declare a secret in the config file:
{ raw = <secret> }
for the raw secret as string (unsafe, not recommended),{ cmd = <secret-cmd> }
for command that exposes the secret,{ keyring = <secret-entry> }
for entry in your system's global keyring that contains the secret.
This applies for:
imap-passwd
imap-oauth2-client-secret
imap-oauth2-access-token
imap-oauth2-refresh-token
smtp-passwd
smtp-oauth2-client-secret
smtp-oauth2-access-token
smtp-oauth2-refresh-token
Fixed
- Fixed Windows releases corrupted archives.
Removed
- [BREAKING] Removed
-s|--sanitize
option. It is done by default now, except if the-t|--mime-type html
is set. - [BREAKING] Removed
native-tls
support,rustls-tls
is now the only TLS provider available. Removed in consequencenative-tls
,rustls-tls
andrustls-native-certs
cargo features.
0.7.3 - 2023-05-01
Fixed
- Fixed Windows releases (due to typo in the github action script).
- Fixed unit tests.
0.7.2 - 2023-05-01
Added
-
Added
create
anddelete
folder commands sourcehut#54. -
Added generated completions and man pages to releases sourcehut#43.
-
Added new account config option
sync-folders-strategy
which allows to choose a folders synchronization strategy sourcehut#59:sync-folders-strategy = "all"
: synchronize all existing folders for the current accountsync-folders-strategy.include = ["folder1", "folder2", …]
: synchronize only the given folders for the current accountsync-folders-strategy.exclude = ["folder1", "folder2", …]
: synchronizes all folders except the given ones for the current account
Also added new
account sync
arguments that override the account config option:-A|--all-folders
: include all folders to the synchronization.-F|--include-folder
: include given folders to the synchronization. They can be repeated-F folder1 folder2
or-F folder1 -F folder2
.-x|--exclude-folder
: exclude given folders from the synchronization. They can be repeated-x folder1 folder2
or-x folder1 -F folder2
.
-
Added cargo features
native-tls
(default),rustls-tls
andrustls-native-certs
.
Changed
- Made global options truly global, which means they can be used everywhere (not only before commands but also after) sourcehut#60.
- Replaced reply all
-a
argument with-A
because it conflicted with the global option-a|--account
. - Replaced
himalaya-lib
bypimalaya-email
. - Renamed feature
vendored
tonative-tls-vendored
. - Removed the
develop
branch, all the development is now done on themaster
branch.
Fixed
- Fixed config deserialization issue with
email-hooks
andemail-reading-format
. - Fixed flags case sensitivity.
0.7.1 - 2023-02-14
Added
- Added command
folders expunge
that deletes all emails marked for deletion.
Changed
- Changed the location of the documentation.
Fixed
- Fixed broken links in README.md.
Removed
- Removed the
maildir-backend
cargo feature, it is now included by default. - Removed issues section on GitHub, now issues need to be opened by sending an email at ~soywod/pimalaya@todo.sr.ht.
0.7.0 - 2023-02-08
Added
- Added offline support with the
account sync
command to synchronize a backend to a local Maildir backend #342. - Added the flag
--disable-cache
to not use the local Maildir backend. - Added the email composer (from its own repository) #341.
- Added Musl builds to releases #356.
- Added
himalaya man
command to generate man page #419.
Changed
- Made commands
read
,attachments
,flags
,copy
,move
,delete
accept multiple ids. - Flipped arguments
ids
andfolder
for commandscopy
andmove
in order the folder not to be considered as an id.
Fixed
- Fixed missing folder aliases #430.
Removed
- Removed the
-a|--attachment
argument fromwrite
,reply
andforward
commands. Instead you can attach documents directly from the template using the syntax<#part filename=/path/to/you/document.ext>
. - Removed the
-e|--encrypt
flag fromwrite
,reply
andforward
commands. Instead you can encrypt and sign parts directly from the template using the syntax<#part type=text/plain encrypt=command sign=command>Hello!<#/part>
. - Removed the
-l|--log-level
option, use instead theRUST_LOG
environment variable (see the wiki)
0.6.1 - 2022-10-12
Added
- Added
-s|--sanitize
flag for theread
command.
Changed
- Changed the behaviour of the
-t|--mime-type
argument of theread
command. It is less strict now: if no part is found for the given MIME type, it will fallback to the other one. For example, giving-t html
will show in priority HTML parts, but if none of them are found it will show plain parts instead (and vice versa). - Sanitization is not done by default when using the
read
command, the flag-s|--sanitize
needs to be explicitly provided.
Fixed
- Fixed empty text bodies when reading html part on plain text email #352.
0.6.0 - 2022-10-10
Changed
-
Separated the CLI from the lib module #340.
The source code has been split into subrepositories:
-
[BREAKING] Renamed
-m|--mailbox
to-f|--folder
-
[BREAKING] Refactored config system #344.
The configuration has been rethought in order to be more intuitive and structured. Here are the breaking changes for the global config:
name
becomesdisplay-name
and is not mandatory anymoresignature-delimiter
becomessignature-delim
default-page-size
has been moved tofolder-listing-page-size
andemail-listing-page-size
notify-cmd
,notify-query
andwatch-cmds
have been removed from the global config (available in account config only)folder-aliases
has been added to the global config (previously known asmailboxes
from the account config)email-reading-headers
,email-reading-format
,email-reading-decrypt-cmd
,email-writing-encrypt-cmd
andemail-hooks
have been added
The account config inherits the same breaking changes from the global config, plus:
imap-*
requiresbackend = "imap"
maildir-*
requiresbackend = "maildir"
notmuch-*
requiresbackend = "notmuch"
smtp-*
requiressender = "smtp"
sendmail-*
requiressender = "sendmail"
pgp-encrypt-cmd
becomesemail-writing-encrypt-cmd
pgp-decrypt-cmd
becomesemail-reading-decrypt-cmd
mailboxes
becomesfolder-aliases
hooks
becomesemail-hooks
maildir-dir
becomesmaildir-root-dir
notmuch-database-dir
becomesnotmuch-db-path
0.5.10 - 2022-03-20
Fixed
0.5.9 - 2022-03-12
Added
Changed
- Improve
attachments
command #281
Fixed
In-Reply-To
not set properly when replying to a message #323Cc
missing or invalid when replying to a message #324- Notmuch backend hangs #329
- Maildir e2e tests #335
- JSON API for listings #331
0.5.8 - 2022-03-04
Added
Changed
- Vim doc about mailbox pickers #298
Fixed
0.5.7 - 2022-03-01
Added
- Notmuch support #57
Fixed
- Build failure due to
imap
version #303 - No tilde expansion in
maildir-dir
#305 - Unknown command SORT #308
Changed
- [BREAKING] Replace
inbox-folder
,sent-folder
anddraft-folder
by a generic hashmapmailboxes
- Display short envelopes id for
maildir
andnotmuch
backends #309
0.5.6 - 2022-02-22
Added
Fixed
- Suffix to downloaded attachments with same name #204
0.5.5 - 2022-02-08
Added
- Contributing guide #256
- Notify query config option #289
- End-to-end encryption #54
Fixed
0.5.4 - 2022-02-05
Fixed
0.5.3 - 2022-02-03
Added
- Activate rust-imap logs when trace mode is enabled
- Set up cargo deployment
0.5.2 - 2022-02-02
Fixed
- Blur in list msg screenshot #181
- Make inbox, sent and drafts folders customizable #172
- Vim plugin get focused msg id #268
- Nix run issue #272
- Range not displayed when fetch fails #276
- Blank lines and spaces in
text/plain
parts #280 - Watch command #271
- Mailbox telescope.nvim preview #249
Removed
- The wiki git submodule #273
0.5.1 - 2021-10-24
Added
Fixed
- Error when receiving notification from
notify
command #228
Changed
- Remove error when empty subject #229
- Vim plugin does not render anymore the msg by itself, it uses the one available from the CLI #220
0.5.0 - 2021-10-10
Added
- Mailto support #162
- Remove previous signature when replying/forwarding a message #193
- Config option
signature-delimiter
to customize the signature delimiter (default to-- \n
) [#114] - Expand tilde and env vars for
downloads-dir
andsignature
#102
Changed
- [BREAKING] Folder structure, message management, JSON API and Vim plugin #199
- Pagination for list and search cmd starts from 1 instead of 0 #186
- Errors management with
anyhow
#152
Fixed
- Panic on flags command #190
- Make more use of serde #153
- Write message vim plugin #196
- Invalid encoding when sending message #205
- Pagination reset current account #215
- New/reply/forward from Vim plugin since Tpl refactor #176
0.4.0 - 2021-06-03
Added
- Add ability to change account in with the Vim plugin #91
- Add possibility to make Himalaya default email app #160 [#161]
Changed
- [BREAKING] Short version of reply
--all
arg is now-A
to avoid conflicts with--attachment|-a
- Template management #80
Fixed
Removed
Content-Type
from templates #146
0.3.2 - 2021-05-08
Added
- Mailbox attributes #134
- Wiki entry about new messages counter #121
- Copy/move/delete a message in vim #95
Changed
- Get signature from file #135
- [BREAKING] Split
idle
command into two commands:notify
: Runsnotify-cmd
when a new message arrives to the serverwatch
: Runswatch-cmds
when any change occurs on the server
Removed
.exe
extension from release binaries #144
0.3.1 - 2021-05-04
Added
- Send message via stdin #78
Fixed
- Table with subject containing
\r
,\n
or\t
#141 - Overflow panic when shrink column #138
- Vim plugin empty mailbox message #136
0.3.0 - 2021-04-28
Fixed
- IDLE mode after network interruption #123
- Output redirected to
stderr
#130 - Refactor table system #132
- Editon file format on Linux #133
- Show email address when name not available #131
Removed
--log-level|-l
arg (replaced by defaultRUST_LOG
env var fromenv_logger
) #130
0.2.7 - 2021-04-24
Added
Changed
Fixed
0.2.6 - 2021-04-17
Added
- Insecure TLS option #84 #103 [#105]
- Completion subcommands [#99]
- Vim flags to enable telescope preview and to choose picker [#97]
Changed
- Make
install.sh
POSIX compliant [#53]
Fixed
- SMTP port #87
- Save msg upon error #59
- Answered flag not set #50
- Panic when downloads-dir does not exist #100
- Idle mode incorrect new message notification #48
0.2.5 - 2021-04-12
Fixed
0.2.4 - 2021-04-09
Added
- Wiki entry for Gmail users #58
- Info logs for copy/move/delete cmd + silent mode #74
--raw
arg forread
cmd #79
Changed
- Refactor output system + log levels #74
0.2.3 - 2021-04-08
Added
- Telescope support #61
Fixed
0.2.2 - 2021-04-04
Added
w
alias forwrite
cmd
Fixed
attachments
cmd logs- Page size arg
search
cmd
0.2.1 - 2021-04-04
Added
- IDLE support #29
- Improve choice after editing msg #30
- Flags management #41
- Copy feature #35
- Move feature #31
- Delete feature [#36]
- Signature support #33
- Add attachment(s) to a message (CLI) #37
Changed
- Errors management with
error_chain
#39
Fixed
0.2.0 - 2021-03-10
Added
Changed
- JSON support #18
0.1.0 - 2021-01-17
Added
- Parse TOML config #1
- Populate Config struct from TOML #2
- Set up IMAP connection #3
- List new emails [#6]
- Set up CLI arg parser #15
- List mailboxes command #5
- Text and HTML previews #12 #13
- Set up SMTP connection #4
- Write new email #8
- Write new email #8
- Reply, reply all and forward #9 #10 #11
- Download attachments #14
- Merge
Email
withMsg
#21 - List command with pagination #19
- Icon in table when attachment is present #16
- Multi-account #17
- Password from command #22
- Set up README #20