aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authory0ast <joost@joo.st>2020-08-20 19:22:50 +0200
committerReto Brunner <reto@labrat.space>2020-08-20 21:54:31 +0200
commit6a1c0f60afcbc56d11ef3a2b58f04f83fc67bf3b (patch)
tree5daa961ae9d44d6f57da530e621a57ad0345fbe4
parent2a186cfd713e5ba5ae649f6794b58f1bd02393fc (diff)
downloadaerc-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.go25
-rw-r--r--config/config.go3
-rw-r--r--doc/aerc-config.5.scd7
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