タイトルのまんま。
Gmailチェックしろやという話になるんだけど、Google Documentに保存したいなぁという事があったので、人力はしんどい。というわけで、メール内容をGoogle Document
に保存して、メールのサブジェクトと受信日をスプレッドシートの特定箇所に追加していくってのを Google App Script にした。
参考
- 特定のラベルが付いたgmailでの受信を自動的にスプレッドシートに記録したい
- https://developers.google.com/apps-script/reference/document/document
- https://developers.google.com/apps-script/reference/gmail/
- https://developers.google.com/apps-script/reference/spreadsheet/
スクリプト
Google App Script では main
関数しか認識しないはずなので、一日置きとか数時間おき程度に、それを定期実行させます。
/**
* 特定のメールを Google Document に保存して、受信日とタイトルと保存先リンクをスプレッドシートに保存をする
*
* (c) a.yasui@gmail.com
*/
var GMAIL_LABEL_NAME = '<ラベル>';
var ATYS_GOOGLE_SPREAD_SHEET_FILE_NAME = '<スプレッドシート名>';
var ATYS_GOOGLE_SPREAD_SHEET_NAME = '<保存するシート名>';
/**
* Gmail云々
*/
var gmail = function(label){
this.label = label;
this.getMails = function(){
var start = 0;
var max = 500;
return GmailApp.search('label:' + label + ' is:unread', start, max);
};
};
/**
* SpreadSheet をよしなにする
*/
var sheet = function(spread_sheet_name, sheetname){
var file_name = spread_sheet_name;
this.sheet_name = sheetname;
this.getSheetName = function(){
return this.sheet_name;
};
this.spread_sheet = null;
this.getSpreadSheet = function(){
return this.spread_sheet;
};
this.setSpreadSheet = function(sp){ this.spread_sheet = sp; };
// Search file.
var drive_files = DriveApp.searchFiles('title contains "'+ file_name +'"')
while(drive_files.hasNext()) {
var file = drive_files.next();
Logger.log("find file: " + file.getName());
var sheet = SpreadsheetApp.open(file);
this.setSpreadSheet(sheet);
break;
}
/**
* コンストラクタで指定したシートの末の行に、A,B,C列それぞれに値を入れる
*
* @param string date
* @param string subject
* @param string link
*/
this.add = function(date, subject, link){
var spread_sheet = this.getSpreadSheet();
if(!spread_sheet){
Logger.log("Cannot open the spreadSheet!!");
return ;
}
var sheet = spread_sheet.getSheetByName( this.getSheetName() );
var row = sheet.getLastRow() + 1;
sheet.getRange("A" + row + ":C"+row).setValues([ [ date, subject, link ] ]);
};
};
function main(){
var gmail_messages = new gmail( GMAIL_LABEL_NAME );
var g_sheet = new sheet( ATYS_GOOGLE_SPREAD_SHEET_FILE_NAME, ATYS_GOOGLE_SPREAD_SHEET_NAME );
var threads = gmail_messages.getMails();
for( var i in threads) {
var thread = threads[i];
var messages = thread.getMessages();
for ( var j in messages ){
var message = messages[j];
if( message.isUnread() ){
var date = message.getDate();
var subject = message.getSubject();
// ドキュメントを作成して保存をする
var doc = DocumentApp.create( subject );
doc.getBody().setText( message.getRawContent() );
var url = doc.getUrl();
doc.saveAndClose();
g_sheet.add(date, subject, url);
}
}
// 既読にする
thread.markRead();
Utilities.sleep(10000);
}
}