mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 04:36:43 +00:00
Pop-out messageID format into constants
This commit is contained in:
@ -36,7 +36,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/)
|
||||
* Alternative Routing is enabled/disabled by `ClientManager`
|
||||
* Logging out of `Clients` is handled/retried asynchronously by `ClientManager`
|
||||
* GODT-265 Alternative Routing v2 (more resiliant to short term connection drops)
|
||||
|
||||
* GODT-310 Alternative parsing of `References` header (old parsing probably malformed message IDs)
|
||||
|
||||
### Fixed
|
||||
* Use correct binary name when finding location of addcert.scpt
|
||||
|
||||
@ -148,10 +148,10 @@ func (im *imapMailbox) CreateMessage(flags []string, date time.Time, body imap.L
|
||||
if len(referenceList) > 0 {
|
||||
lastReference := referenceList[len(referenceList)-1]
|
||||
// In case we are using a mail client which corrupts headers, try "References" too.
|
||||
re := regexp.MustCompile(`(?U)<.*@protonmail.internalid>`)
|
||||
match := re.FindString(lastReference)
|
||||
if match != "" {
|
||||
internalID = match[1 : len(match)-len("@protonmail.internalid>")]
|
||||
re := regexp.MustCompile(pmapi.InternalReferenceFormat)
|
||||
match := re.FindStringSubmatch(lastReference)
|
||||
if len(match) > 0 {
|
||||
internalID = match[1]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -370,12 +370,12 @@ func (su *smtpUser) handleReferencesHeader(m *pmapi.Message) (draftID, parentID
|
||||
references := m.Header.Get("References")
|
||||
newReferences := []string{}
|
||||
for _, reference := range strings.Fields(references) {
|
||||
if !strings.Contains(reference, "@protonmail.internalid") {
|
||||
if !strings.Contains(reference, "@"+pmapi.InternalIDDomain) {
|
||||
newReferences = append(newReferences, reference)
|
||||
} else { // internalid is the parentID.
|
||||
idMatch := regexp.MustCompile(`(?U)<.*@protonmail.internalid>`).FindString(reference)
|
||||
if idMatch != "" {
|
||||
lastID := idMatch[1 : len(idMatch)-len("@protonmail.internalid>")]
|
||||
idMatch := regexp.MustCompile(pmapi.InternalReferenceFormat).FindStringSubmatch(reference)
|
||||
if len(idMatch) > 0 {
|
||||
lastID := idMatch[1]
|
||||
filter := &pmapi.MessagesFilter{ID: []string{lastID}}
|
||||
if su.addressID != "" {
|
||||
filter.AddressID = su.addressID
|
||||
|
||||
@ -74,19 +74,19 @@ func GetHeader(msg *pmapi.Message) textproto.MIMEHeader { //nolint[funlen]
|
||||
}
|
||||
if msg.ID != "" {
|
||||
if h.Get("Message-Id") == "" {
|
||||
h.Set("Message-Id", "<"+msg.ID+"@protonmail.internalid>")
|
||||
h.Set("Message-Id", "<"+msg.ID+"@"+pmapi.InternalIDDomain+">")
|
||||
}
|
||||
h.Set("X-Pm-Internal-Id", msg.ID)
|
||||
// Forward References, and include the message ID here (to improve outlook support).
|
||||
if references := h.Get("References"); !strings.Contains(references, msg.ID) {
|
||||
references += " <" + msg.ID + "@protonmail.internalid>"
|
||||
references += " <" + msg.ID + "@" + pmapi.InternalIDDomain + ">"
|
||||
h.Set("References", references)
|
||||
}
|
||||
}
|
||||
if msg.ConversationID != "" {
|
||||
h.Set("X-Pm-ConversationID-Id", msg.ConversationID)
|
||||
if references := h.Get("References"); !strings.Contains(references, msg.ConversationID) {
|
||||
references += " <" + msg.ConversationID + "@protonmail.conversationid>"
|
||||
references += " <" + msg.ConversationID + "@" + pmapi.ConversationIDDomain + ">"
|
||||
h.Set("References", references)
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,6 +141,15 @@ const (
|
||||
// Due to API limitations, we shouldn't make requests with more than 100 message IDs at a time.
|
||||
const messageIDPageSize = 100
|
||||
|
||||
// ConversationIDDomain is used as a placeholder for conversation reference headers to improve compatibility with various clients
|
||||
const ConversationIDDomain = `protonmail.conversationid`
|
||||
|
||||
// InternalIDDomain is used as a placeholder for reference/message ID headers to improve compatibility with various clients
|
||||
const InternalIDDomain = `protonmail.internalid`
|
||||
|
||||
// InternalReferenceFormat describes format of the message ID (as regex) used for parsing reference headers
|
||||
const InternalReferenceFormat = `(?U)<.*@` + InternalIDDomain + `>`
|
||||
|
||||
// Message structure.
|
||||
type Message struct {
|
||||
ID string `json:",omitempty"`
|
||||
|
||||
Reference in New Issue
Block a user