diff options
author | y0ast <joost@joo.st> | 2020-08-20 19:22:50 +0200 |
---|---|---|
committer | Reto Brunner <reto@labrat.space> | 2020-08-20 21:54:31 +0200 |
commit | 6a1c0f60afcbc56d11ef3a2b58f04f83fc67bf3b (patch) | |
tree | 5daa961ae9d44d6f57da530e621a57ad0345fbe4 | |
parent | 2a186cfd713e5ba5ae649f6794b58f1bd02393fc (diff) | |
download | aerc-6a1c0f60afcbc56d11ef3a2b58f04f83fc67bf3b.tar.gz |
Add account alias configuration and correctly set From field
We infer the correct From using the To: and Cc: field of the email that
we reply to.
-rw-r--r-- | commands/msg/reply.go | 25 | ||||
-rw-r--r-- | config/config.go | 3 | ||||
-rw-r--r-- | doc/aerc-config.5.scd | 7 |
3 files changed, 34 insertions, 1 deletions
diff --git a/commands/msg/reply.go b/commands/msg/reply.go index 7181e1e7..8cca2b17 100644 --- a/commands/msg/reply.go +++ b/commands/msg/reply.go @@ -64,6 +64,10 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { if err != nil { return err } + alias_of_us, err := format.ParseAddressList(conf.Aliases) + if err != nil { + return err + } store := widget.Store() if store == nil { return errors.New("Cannot perform action. Messages still loading") @@ -72,7 +76,6 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { if err != nil { return err } - acct.Logger().Println("Replying to email " + msg.Envelope.MessageId) var ( to []*models.Address @@ -84,6 +87,26 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error { } else { to = msg.Envelope.From } + + // figure out the sending from address if we have aliases + if len(alias_of_us) != 0 { + allRecipients := append(msg.Envelope.To, msg.Envelope.Cc...) + outer: + for _, addr := range allRecipients { + if addr.Address == from.Address { + from = addr + break + } + for _, alias := range alias_of_us { + if addr.Address == alias.Address { + from = addr + break outer + } + } + } + + } + isMainRecipient := func(a *models.Address) bool { for _, ta := range to { if ta.Address == a.Address { diff --git a/config/config.go b/config/config.go index 12096baf..3ae26c12 100644 --- a/config/config.go +++ b/config/config.go @@ -75,6 +75,7 @@ type AccountConfig struct { Default string Postpone string From string + Aliases string Name string Source string SourceCredCmd string @@ -202,6 +203,8 @@ func loadAccountConfig(path string) ([]AccountConfig, error) { account.OutgoingCredCmd = val } else if key == "from" { account.From = val + } else if key == "aliases" { + account.Aliases = val } else if key == "copy-to" { account.CopyTo = val } else if key == "archive" { diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index fcd70ec7..64a09986 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -409,6 +409,13 @@ Note that many of these configuration options are written for you, such as Default: none +*aliases* + All aliases of the current account. These will be used to fill in the From: + field. Make sure that your email server accepts this value, or for example + use *aerc-sendmail*(5) in combination with msmtp and --read-envelope-from. + + Default: none + *outgoing* Specifies the transport for sending outgoing emails on this account. It should be a connection string, and the specific meaning of each component |