-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparseEmailData.ts
25 lines (23 loc) · 948 Bytes
/
parseEmailData.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { EmailData } from '@suin/email-data'
import { AddressObject, simpleParser } from 'mailparser'
export const parseEmailData = (emailRawString: string): Promise<EmailData> =>
new Promise<EmailData>((resolve, reject) =>
simpleParser(emailRawString, {}, (err, parsed) =>
err
? reject(err)
: resolve({
messageId: parsed.messageId,
to: toAddressList(parsed.to),
replyTo: toAddressList(parsed.replyTo),
from: toAddressList(parsed.from),
cc: toAddressList(parsed.cc),
subject: parsed.subject,
bodyText: parsed.text || undefined,
bodyHtml: parsed.html || undefined,
date: parsed.date?.toISOString(),
source: emailRawString,
}),
),
)
const toAddressList = (addressObject?: AddressObject): EmailData['to'] =>
addressObject?.value.map(({ name, address }) => ({ name, address })) ?? []