【GAS】Gmail APIで取得したメッセージをパースする
こんにちは、フリーランスエンジニアの太田雅昭です。
Gmail APIのメッセージ
Gmail APIで取得したメッセージは、以下のようになっています。
interface Message {
id: string;
threadId: string;
labelIds: string[];
snippet: string;
historyId: string;
internalDate: string;
payload: MessagePart;
sizeEstimate: number;
raw: string;
}
おや?本文はどこでしょう。添付ファイルはどれやねん。
Gmail APIで取得したデータは、複雑です。ChatGPTに聞きながら、ようやくある程度理解はしました。とにかく入れ子になったpartを再帰処理して、mimeTypeで判別分岐すればいいようです。ヘッダーも見る必要があります。添付ファイルかどうかも、チェックしないといけません。えーい、面倒だ
パースする
はい、ありました。
https://www.npmjs.com/package/gmail-api-parse-message-ts
これを使えば、以下のようにパースできます。
const parser = new ParseGmailApi();
const parsedMessage = parser.parseMessage(message);
// パース結果は以下の形式
interface IEmail {
id: string;
threadId: string;
snippet: string;
historyId: string;
internalDate: number;
sentDate: number;
from: IReceiver; // { name:'Amzn Svc', email:'web@amz.com' }
to: IReceiver[]; // [ { name:'Lars K', email:'lk@ema.dk' } ]
cc: IReceiver[]; // --||--
bcc: IReceiver[]; // --||--
subject: string; // "subject": "The AWS Summit Stockholm is back! Register and join us on May 22, 2019",
textHtml: string,
textPlain: string,
attachments: IAttachment[],
inline?: IAttachment[],
size: number;
labelIds: string[],
labels?: IGapiLabel[], // parsed.labelIds of IGapiLabel[] // you need your own implementation
headers: Map<string, string>,
isUnread: boolean;
isDownloaded: boolean;
}
おぉ、神々しい。
GAS用のライブラリ
APIでの取得込みのライブラリを、以下で公開しています。