LoginSignup
0
0

More than 5 years have passed since last update.

特定のメールを Google Document に保存して、受信日とタイトルと保存先リンクをスプレッドシートに保存をする

Posted at

タイトルのまんま。

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);
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0