diff --git a/protonmail/messages.go b/protonmail/messages.go index 071bfb2..78548d5 100644 --- a/protonmail/messages.go +++ b/protonmail/messages.go @@ -152,7 +152,7 @@ type MessageFilter struct { Starred *bool Unread *bool Conversation string - Address string + AddressID string ID []string ExternalID string } @@ -180,8 +180,8 @@ func (c *Client) ListMessages(filter *MessageFilter) (total int, messages []*Mes if filter.Conversation != "" { v.Set("Conversation", filter.Conversation) } - if filter.Address != "" { - v.Set("Address", filter.Address) + if filter.AddressID != "" { + v.Set("AddressID", filter.AddressID) } if filter.ExternalID != "" { v.Set("ExternalID", filter.ExternalID) diff --git a/smtp/smtp.go b/smtp/smtp.go index ae68cfd..13e9818 100644 --- a/smtp/smtp.go +++ b/smtp/smtp.go @@ -113,8 +113,26 @@ func (u *user) Send(from string, to []string, r io.Reader) error { return err } - // TODO: parentID from In-Reply-To - msg, err = u.c.CreateDraftMessage(msg, "") + parentID := "" + inReplyToList, _ := mr.Header.AddressList("In-Reply-To") + if len(inReplyToList) == 1 { + inReplyTo := inReplyToList[0].Address + + filter := protonmail.MessageFilter{ + Limit: 1, + ExternalID: inReplyTo, + AddressID: fromAddr.ID, + } + total, msgs, err := u.c.ListMessages(&filter) + if err != nil { + return err + } + if total == 1 { + parentID = msgs[0].ID + } + } + + msg, err = u.c.CreateDraftMessage(msg, parentID) if err != nil { return fmt.Errorf("cannot create draft message: %v", err) }