- resilience against missing libmagic (useful on a contained environment)
- better SMTP retries #35
- better typing #31
- fix: attachment included while signing only (without sending)
- fix: loading headers not encoded with utf-8
- fix: better S/MIME detection #29
- drop Python 3.9 support
- SMTP HELO FQDN
- experimental XARF reports reading
- disguised addresses parsing
- fix #24 stable locale
- allow
file-magic
instead ofpython-magic
package be installed on the system (#25) - fix GPG signing when attaching file with name longer than 34 chars (#19)
- CHANGED:
Envelope(sender=).sender()
alias REMOVED because to the unambiguous naming clash between theFrom
and theSender
e-mail header. UseEnvelope().from_(...)
andEnvelope().header("Sender", ...)
instead. Pity that 'from' is a reserved keyword, "from_" looks bad. - CHANGED:
Envelope.default
instance REMOVED because explicit is better than implicit. For setting defaults useEnvelope().copy()
instead - CHANGED: explicitly specifying encryption keys prevents encrypting for other recipients
- GPG encryption for arbitrary keys only possible #9 #14
- CHANGED: Optional parameter "email_or_list" renamed to "email_or_more" (methods
to
and friends)- When setting recipients, apart from list other iterables (tuple, generator, set, ...) may be used
- fix: when signing key fails, do not sign with the default GPG private key
- S/MIME insecure Rand PRNG removed #18
- disable validate_email module blacklist updater #17
- SMTP envelope MAIL FROM address #16
- SMTP exposes timeout #20 , attempts, delay
- SMTP re-connect on every error #21
- smtp.quit() exposed #5
- group syntax is no more reported as erroneous (ex: undisclosed-recipients:;)
- better invalid header loading (ex: invalid charset in the content type header)
- SMTP connection uses
ssl.create_default_context()
by default
- choose subject text placeholder while PGP encrypting
- fix sending e-mail without From if deliberately set to False (regression)
– Address properties are "" if empty (handy when comparing strings)
- replace invalid characters when loading (the way the e-mail clients behave)
- headers truly case-insensitive when loading
.from_()
and.sender()
truly return anAddress
even if not set (and then the Address is empty)- fix: the internal cache correctly regenerated
- message is internally held in bytes -> helpful error message when charset fails
- exposed Address
- Address casefold method and
user
andhost
properties - loading ignores invalid headers (and prints out a warning)
- fix case-insensitive header loading
- fix non-latin chars in header loading
- fix charset for base64 encoded content
- fix the default encoding while casting an attachment to string
- CHANGED:
.attach(filename=)
renamed to.attach(name=)
--attachment
renamed to--attach
.to()
,.cc()
,.bcc()
,.from_()
,.sender()
,.reply_to()
,.recipients()
now return anAddress
object(s), notstr
.as_message
-> Message- e-mail validation
- proper e-mail addresses handling: they can be in a string delimited by comma (or semicolon)
- text alternatives
- fix encoded headers
- fix attainable contents fetching
- embedding inline images
- loading parses attachments and decrypts
- contacts might be cleared (ex: to clear
To
header intuitively type.to(False)
) .attachments
,--attachments [NAME]
-> read the list of the attachments- preview returns nicely formatted headers
- fix: smtplib.SMTP_SSL handshake operation timed out caught
- if a line is longer than 1000 characters, makes the message be transferred safely by bytes (which would not break up DKIM)
- when "Content-Transfer-Encoding" is set to "base64" or "quo-pri" and reading message, it gets decoded (useful when loading EML files
cat file.eml | envelope --message
) - preview method available from CLI
- fix: default object
- better EML files loading
- generic header manipulation (removing, adding multiple, mostly preserves order when loading)
- reply-to allows multiple addresses
- CHANGED:
- Envelope.init parameters re-ordered
from envelope import Envelope
is the only right way to import,import envelope
no more supported (slightly longer, however better suits Python naming conventions)
- fix: --attach-key flag in CLI did not work
- auto-import GPG key from file
- auto-encrypt GPG possibility
- S/MIME multiple recipients
- "sender" works as an alias for "from_" if both are not used; otherwise standard "Sender" header is included
- .date(date) method allows turn off automatic Date header adding
- fix: object is modified whenever a parameter changes (ex: if user changes subject multiple times), not at send time
.message
has new aliases:.body
and.text
to facilitate the programmer's workflow because when autocomplete
- smime dependency is optional – thus package can be installed directly without having swig library
- set signing to "auto" for signing if there is a key matching to the "from" header
- preview method
- recipients method
- read subject(), message()
- load method
- choose mime subtype (html or plain) + conditional conversion of line breaks to
#4 - experimental load function to create e-mail object from text templates
- fix: possibility to include own "Content-Type" into headers
- fix: Subject tried to be re-set when no GPG neither S/MIME used
- CHANGED:
encrypt-file
changed toencrypt-path
(to match theencrypt_path
parameter of theencrypt
method)- parameter swap from
.encrypt(sign=None, key=True)
to.encrypt(key=True, sign=None)
due to S/MIME that does not take the key from the GPG keyring but needs the certificate to be specified every time.
- S\MIME
- signing (
M2Crypto
instead ofsmime
package) - insert subject while encrypting
- signing (
- unit tests + travis build status
- SMTP
- if SMTP/INI file is given as a relative path and not found at CWD, we try program directory (useful when importing Envelope as a library from another program)
- TLS security supported
- if security not defined, determined by port
- bash completion
- --quiet flag
- fix launching with no flags (bare message erroneously tried to be GPG-signed by default)
- attachment file not found caught
- output attached to the complex example in the README
- fix launched in a loop
- CLI: if nothing to do, assume parameters are a bone of an e-mail message to produce output
- check GPG signing failed
- fix GnuPG home
- fix encrypted subject
- SMTP supports INI file
check
will print out DNS information of the sender's domain- CLI: metavar display names added
- attach_key flag added
- signing, encrypting, sending
- GPG, S/MIME support
- cli, one-liner, fluent interface
- SMTP reconnection