diff --git a/services/mail/mail-common/src/__tests__/parseEmailHeader.test.ts b/services/mail/mail-common/src/__tests__/parseEmailHeader.test.ts index ee83393b97..f262601087 100644 --- a/services/mail/mail-common/src/__tests__/parseEmailHeader.test.ts +++ b/services/mail/mail-common/src/__tests__/parseEmailHeader.test.ts @@ -47,8 +47,8 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john.doe@example.com', - firstName: '', - lastName: 'John Doe' + firstName: 'John', + lastName: 'Doe' } ]) }) @@ -58,8 +58,8 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john.doe@example.com', - firstName: '', - lastName: 'John Doe' + firstName: 'John', + lastName: 'Doe' } ]) }) @@ -69,8 +69,8 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john.doe@example.com', - firstName: '', - lastName: 'John Doe Smith' + firstName: 'John Doe Smith', + lastName: '' } ]) }) @@ -96,13 +96,13 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john@example.com', - firstName: '', - lastName: 'John' + firstName: 'John', + lastName: '' }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane Doe' + firstName: 'Jane', + lastName: 'Doe' } ]) }) @@ -112,13 +112,13 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john@example.com', - firstName: '', - lastName: 'Doe, John' + firstName: 'Doe', + lastName: 'John' }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane Doe' + firstName: 'Jane', + lastName: 'Doe' } ]) }) @@ -133,8 +133,8 @@ describe('parseEmailHeader', () => { }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane Doe' + firstName: 'Jane', + lastName: 'Doe' } ]) }) @@ -165,8 +165,8 @@ describe('parseEmailHeader', () => { }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane Doe' + firstName: 'Jane', + lastName: 'Doe' } ]) }) @@ -176,13 +176,13 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'example-staff@example.com', - firstName: '', - lastName: 'example staff' + firstName: 'example', + lastName: 'staff' }, { email: 'personnel@example.com', - firstName: '', - lastName: 'personnel' + firstName: 'personnel', + lastName: '' } ]) }) @@ -208,13 +208,13 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john@example.com', - firstName: '', - lastName: 'John' + firstName: 'John', + lastName: '' }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane' + firstName: 'Jane', + lastName: '' } ]) }) @@ -224,13 +224,13 @@ describe('parseEmailHeader', () => { expect(result).toEqual([ { email: 'john@example.com', - firstName: '', - lastName: 'John' + firstName: 'John', + lastName: '' }, { email: 'jane@example.com', - firstName: '', - lastName: 'Jane' + firstName: 'Jane', + lastName: '' } ]) }) diff --git a/services/mail/mail-common/src/__tests__/parseNameFromEmailHeader.test.ts b/services/mail/mail-common/src/__tests__/parseNameFromEmailHeader.test.ts index ee2c81ad8b..43ca259c10 100644 --- a/services/mail/mail-common/src/__tests__/parseNameFromEmailHeader.test.ts +++ b/services/mail/mail-common/src/__tests__/parseNameFromEmailHeader.test.ts @@ -21,8 +21,8 @@ describe('parseNameFromEmailHeader', () => { const input = '"John Doe" ' const expected: EmailContact = { email: 'john.doe@example.com', - firstName: '', - lastName: 'John Doe' + firstName: 'John', + lastName: 'Doe' } expect(parseNameFromEmailHeader(input)).toEqual(expected) @@ -32,8 +32,8 @@ describe('parseNameFromEmailHeader', () => { const input = 'Jane Smith ' const expected: EmailContact = { email: 'jane.smith@example.com', - firstName: '', - lastName: 'Jane Smith' + firstName: 'Jane', + lastName: 'Smith' } expect(parseNameFromEmailHeader(input)).toEqual(expected) @@ -65,8 +65,8 @@ describe('parseNameFromEmailHeader', () => { const input = 'Maria Van Der Berg ' const expected: EmailContact = { email: 'maria@example.com', - firstName: '', - lastName: 'Maria Van Der Berg' + firstName: 'Maria Van Der Berg', + lastName: '' } expect(parseNameFromEmailHeader(input)).toEqual(expected) @@ -108,8 +108,8 @@ describe('parseNameFromEmailHeader', () => { const input = 'Support ' const expected: EmailContact = { email: 'help@example.com', - firstName: '', - lastName: 'Support' + firstName: 'Support', + lastName: '' } expect(parseNameFromEmailHeader(input)).toEqual(expected) @@ -119,8 +119,8 @@ describe('parseNameFromEmailHeader', () => { const input = '"O\'Neill, James" ' const expected: EmailContact = { email: 'james.oneill@example.com', - firstName: '', - lastName: "O'Neill, James" + firstName: 'O\'Neill', + lastName: 'James' } expect(parseNameFromEmailHeader(input)).toEqual(expected) diff --git a/services/mail/mail-common/src/utils.ts b/services/mail/mail-common/src/utils.ts index 27503550d1..82f10e57fd 100644 --- a/services/mail/mail-common/src/utils.ts +++ b/services/mail/mail-common/src/utils.ts @@ -104,10 +104,26 @@ export function parseNameFromEmailHeader (headerValue: string | undefined): Emai const displayName = match[1]?.trim() const email = match[2].trim() - const wrappedEmail = displayName != null && displayName.length > 0 ? `<${email}>` : email + if (displayName == null || displayName === '') { + return { + email, + firstName: email, + lastName: '' + } + } + const nameParts = displayName + .split(/[\s,;]+/) + .filter((part) => part !== '') + if (nameParts.length === 2) { + return { + email, + firstName: nameParts[0], + lastName: nameParts[1] + } + } return { email, - firstName: wrappedEmail, - lastName: displayName ?? '' + firstName: displayName, + lastName: '' } }