#やりたいこと
Google Apps Scriptを使ってGmailの情報を取得する際に、受信日時を細かく(分単位)で指定したい。
##それでができると何が良いの?
スクリプトに重複取得時の挙動を書く必要がなくなります。
Gmailから定期的に該当するメールを検索して取得するスクリプトにおいて、抽出対象の時間とトリガーの時間を一致させます。
そうすることで、同じメールが重複して取得されることがないため、後続での重複制御が不要になります。(たぶん)
例)
検索条件:受信日時が今から5分前
トリガー:5分毎に実行
#完成したコード
function searchMail(){
// Gmailから特定条件のスレッドを検索しメールを取り出す
//受信日時指定
const date = new Date() ;//現在時刻を取得
const unixTime = date.getTime();//UNIX TIMEに変換
const now = Math.floor(unixTime/1000); //ミリ秒を秒に変換
const term = now - 300; //現在時刻から5分(300秒)前
const termStr = term.toString(); //検索期間を文字列に変換
//検索条件指定
const srchCondition = [ //検索条件を配列で格納
'(検索条件その1)',
'(検索条件その2)'
].join("\u0020"); //半角スペースで連結
const strTerms = 'after:'+ term +' '+ srchCon; //検索条件:termの期間に、srchConの条件に合致するメール
const myThreads = GmailApp.search(strTerms, 0, 30); //条件にマッチしたスレッドを取得
const myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する
/**
あとは取得した情報を煮るなり焼くなりする。
**/
}
##コードの説明
###前段:Gmailの検索条件について
Gmailのヘルプには、日付単位での指定方法しか書いてありません。
説明 | 検索演算子と例 |
---|---|
指定した期間に送信されたメールを検索します | after: before: older: newer: 例: after:2004/04/16 例: before:2004/04/18 |
日(d)、月(m)、年(y)を指定して、それより古いメールか新しいメールを検索します | older_than: newer_than: 例: newer_than:2d |
しかしながら、UNIX時間(エポック時間)を指定して検索することもできるので、これを利用します。
Gmail非公開テクニック:時間帯を指定してメール検索 | ライフハッカー[日本版]
Gmail検索において「after」「before」のパラメータを先ほどのエポック時間で入力し、メールの検索を>します。すると、特定した2つの時間の間に受信したメールが表示されるのです。
###コードの中身の説明
function searchMail(){
// Gmailから特定条件のスレッドを検索しメールを取り出す
//受信日時指定
const date = new Date() ;//現在時刻を取得
const unixTime = date.getTime();//UNIX時間に変換
const now = Math.floor(unixTime/1000); //ミリ秒を秒に変換
コメントに書いてある通りの内容ですが、getTimeで取得したUNIX時間はミリ秒で返ってくるので、秒に変換するのがポイントです。
//検索条件指定
const srchCondition = [ //検索条件を配列で格納
'(検索条件その1)',
'(検索条件その2)'
].join("\u0020"); //半角スペースで連結
受信日時だけ指定することもあまりないと思うので、検索条件も指定しておきます。
一行でつらつら書いても良いのですが、配列で書くと見やすいです。
const strTerms = 'after:'+ term +' '+ srchCon; //検索条件:termの期間に、srchConの条件に合致するメール
const myThreads = GmailApp.search(strTerms, 0, 30); //条件にマッチしたスレッドを取得
const myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する
「after:(UNIX時間)(検索条件)」でメールの検索をして、結果を取得しています。
あとはここから必要な情報を取り出して、煮るなり焼くなり調理してもらえればOKです。
#関連URL