Releases: pimalaya/himalaya
v1.0.0-beta.4
Added
- Added systemd service in
assets/
folder. - Added configuration option
message.delete.style
that can be eitherfolder
(deleted messages are moved to the Trash folder, default style) orflag
(deleted messages receive the Deleted flag). - Added
--debug
as an alias forRUST_LOG=debug
. - Added
--trace
as an alias forRUST_LOG=trace
andRUST_BACKTRACE=1
. - Added notes about
--debug
and--trace
when error occurs.
Changed
- Added back the search feature: you can now give an optional filter and sort query at the end of the
envelope list
command. Seeenvelope list --help
or pimalaya.org for more detail on the search API. - Changed the
envelope list
folder argument due to the search query: it became a flag--folder|-f
. - Made the global
--config|-c
option repeatable: the first option is considered the path to the main config, and successive options are considered partial overrides #184. - Refactored error management: error should be more clear, colored and can now contain spantrace and backtrace.
- Made
--help
content wrapping properly thanks to theclap
cargo featurewrap_help
. - Improved
template {new,reply,forward}
command JSON output: they return now a JSON object with 3 properties:content
: the content of the templatecursor.row
: the row at which the cursor should be placed by the interface using the templatecursor.col
: the column at which the cursor should be placed by the interface using the template
Fixed
v1.0.0-beta.3
Added
- Added
account check-up
command. - Added wizard warning about google passwords [#41].
Changed
-
Removed account configurations flatten level in order to improve diagnostic errors, due to a bug in clap. This means that accounts need to be prefixed by
accounts
:[my-account]
becomes[accounts.my-account]
. It also opens doors for interface-specific configurations. -
Rolled back cargo feature additions from the previous release. It was a mistake: the amount of features was too big, the code (both CLI and lib) was too hard to maintain. Cargo features kept:
imap
,maildir
,notmuch
,smtp
,sendmail
,account-sync
,account-discovery
,pgp-gpg
,pgp-commands
andpgp-native
. -
Moved
sync.strategy
tofolder.sync.filter
. -
Changed location of the synchronization data from
$XDG_DATA_HOME/himalaya/<account-name>
to$XDG_DATA_HOME/pimalaya/email/sync/<account-name>-cache
. -
Changed location of the synchronization cache from
sync.dir
to$XDG_CACHE_HOME/pimalaya/email/sync/<hash>/
. -
Replaced id mapping database
SQLite
bysled
, a pure key-val store written in Rust to improve portability of the tool. Therefore, id aliases are reset. -
Improved pre and post edit choices interaction [#58].
-
Improved account synchronization performances, making it 50% faster than
mbsync
and 370% faster thanOfflineIMAP
. -
Changed
envelope.watch.{event}.{hook}
: hooks can now be cumulated. For example it is possible to send a system notification and execute a shell command when receiving a new envelope:envelope.watch.received.notify.summary = "New message from {sender}" envelope.watch.received.notify.body = "{subject}" envelope.watch.received.cmd = "echo {id} >> /tmp/new-email-counter"
Fixed
- Fixed bug that was preventing watch placeholders to be replaced when using shell command hook.
- Fixed watch IMAP envelopes issue preventing events to be triggered.
- Fixed DNS account discovery priority issues.
- Fixed SMTP messages not properly sent to all recipients [#172].
- Fixed backend feature badly linked, leading to reply and forward message errors [#173].
v1.0.0-beta.2
Added
- Added cargo feature
wizard
, enabled by default. - Added one cargo feature per backend feature:
account
includingaccount-configure
,account-list
,account-sync
and theaccount-subcmd
folder
includingfolder-add
,folder-list
,folder-expunge
,folder-purge
,folder-delete
and thefolder-subcmd
envelope
includingenvelope-list
,envelope-watch
,envelope-get
and theenvelope-subcmd
flag
includingflag-add
,flag-set
,flag-remove
and theflag-subcmd
message
includingmessage-read
,message-write
,message-mailto
,message-reply
,message-forward
,message-copy
,message-move
,message-delete
,message-save
,message-send
and themessage-subcmd
attachment
includingattachment-download
and theattachment-subcmd
template
includingtemplate-write
,template-reply
,template-forward
,template-save
,template-send
and thetemplate-subcmd
- Added wizard capability to autodetect IMAP and SMTP configurations, based on the Thunderbird Autoconfiguration standard.
- Added back Notmuch backend features.
Changed
- Renamed
folder create
tofolder add
in order to better match types. An alias has been set up, so bothcreate
andadd
still work.
Fixed
- Fixed default command: running
himalaya
without argument lists envelopes, as it used to be in previous versions. - Fixed bug when listing envelopes with
backend = "imap"
,sync.enable = true
andenvelope.watch.backend = "imap"
led to unwanted IMAP connection creation (which slowed down the listing). - Fixed builds related to enabled cargo features.
v1.0.0-beta
The new API of the configuration file contains breaking changes, see config.sample.toml for a documented example of this new API.
You can even test it:
# save the sample config locally
curl https://raw.githubusercontent.com/soywod/himalaya/master/config.sample.toml > config.sample.toml
# spawn a testing IMAP/SMTP server using docker
docker run -it --rm -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' greenmail/standalone:latest
# test the CLI using the sample config
himalaya -c ./config.sample.toml envelope list
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
.
See config.sample.toml for a documented configuration example with the new API.
v0.9.0
This version should be the last before the v1.0.0-beta
!
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
.
v0.8.4
Fixed
- Fixed windows releases due to cargo deps typo.
v0.8.3
Fixed
- Fixed windows releases due to
coredump
crate compilation error. - Fixed macos releases due to macos 12 System Integrity Protection.
v0.8.2
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].
pimalaya-email-tpl
Fixed
- Fixed default PGP verify command that was using invalid option
--recipient
.
pimalaya-email
Changed
- Changed the way folder aliases are resolved. They are now resolved directly from backend implementations, which frees interfaces from this responsibility [#95].
- Bumped
[email protected]
.
Fixed
v0.8.1
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.
v0.8.0
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 recommanded),{ 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.
pimalaya-email
Added
- Added IP support using
rustls
v0.21
[#80]. - Added
AccountConfig::generate_tpl_interpreter
function to generate a template interpreter with default options based on the config (pgp encrypt, pgp verify and attachments dir).
Changed
- Changed
AccountConfig::addr
return type fromlettre::Mailbox
tomail_builder::Address
. - Changed
AccountConfig::email_reading_headers
default values to["From", "To", "Cc", "Subject"]
. - Changed
AccountConfig::email_writing_headers
default values to["From", "To", "In-Reply-To", "Cc", "Subject"]
. - Removed noise around signature by trimming it.
- Changed
Email::parsed
return type frommailparse::ParsedMail
tomail_parser::Message
. - Changed
Email::new_tpl_builder
return type fromResult<TplBuilder>
toNewTplBuilder
. - Renamed
Email::to_read_tpl_builder
toEmail::to_read_tpl
which returns now aResult<Tpl>
directly. - Changed
Email::to_reply_tpl_builder
return type fromResult<TplBuilder>
toReplyTplBuilder
. - Changed
Email::to_forward_tpl_builder
return type fromResult<TplBuilder>
toForwardTplBuilder
. - Renamed
backend::imap::Error::ListEnvelopesOutOfBounds
byBuildPageRangeOutOfBoundsError
. - Replaced [lettre] by [mail-send], [mailparse] by [mail-parser] and [maildir] by [maildirpp].
- Removed
native-tls
support,rustls-tls
is now the only TLS provider available. Removed in consequencenative-tls
,rustls-tls
andrustls-native-certs
cargo features.
Fixed
- Fixed notmuch path not being expanded correctly.
- Fixed
.notmuch
folder created bynotmuch new
command being treated as a folder. Because it is a folder starting by a dot, it was considered as a Maildir++ folder (which is not). - Fixed IMAP pagination error when listing envelopes [#76].
pimalaya-email-tpl
Added
- Added parsing template from raw message support. Parsing is done via the
TplInterpreter
builder, and functionsTplInterpreter::interpret_*
return the parsed template.
Changed
- Replaced [lettre] by [mail-builder] and [mail-parser].
- Use crate [nanohtml2text] instead of manual html to plain transform using ammonia, html-escape and regex.
- Moved MML stuff in its own
mml
module, to be as close as what provides the Emacs MML module. Thetpl
module contains stuff related to template. A template is just an email composed of headers and one unique plain text part. This plain text part can be written in MML. - Compiler options are now attached to the
Tpl
structure.