googleカレンダーに登録→gmailに通知→スプレッドシートにて一覧表示させるスクリプトを作成中なのですが、
googleカレンダーからの通知の最後に必ずついてくる下記の文章を削除した上でスプレッドシートに記載させたいと考えております。
何かいい方法をお教えいただけないでしょうか。
↓削除したい文言
「Google カレンダーからの招待状: https://www.google.com/calendar/
「***(カレンダー名)」カレンダーの招待 - 更新の受信が設定されているため、本メール
を sample@email.com にお送りしています。これらのメールを受けとらないようにするには、
https://www.google.com/calendar/ にログインしてカレンダーの通知設定を変更し
てください。この招待状を転送すると、転送先のユーザーも、主催者に出欠の返答を送信してゲス
トリストに追加してもらったり、自分の招待ステータスに関係なく他のユーザーを招
待したり、あなたの出欠確認の返答を変更したりできるようになります。詳しくは、
https://support.google.com/calendar/answer/37135#forwarding をご覧ください」
#ソースコード
※スクリプト作成についてはhttps://tonari-it.com/gas-gmail-spreadsheet/サイトさんを参考にさせていただきました。
var mySheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('***(シート名)'); function ****(function名①)() { /* Gmailから特定条件のスレッドを検索しメールを取り出す */ var strTerms = 'label:***(ラベル名)';//検索文字列 var myThreads = GmailApp.search(strTerms,0,30); var myMsgs = GmailApp.getMessagesForThreads(myThreads);//二次元配列 var valMsgs = []; /* 各メールから日時、送信元、件名、内容を取り出す */ for(var i=0;i<myMsgs.length;i++){ for(var j=0;j<myMsgs[i].length;j++){ var msid = myMsgs[i][j].getId();//メッセージIDを取得 //もしメッセージIDがスプレッドシートに存在しなければ if(!hasId(msid)){ var date = myMsgs[i][j].getDate(); var from = myMsgs[i][j].getFrom(); var subj = myMsgs[i][j].getSubject(); var body = myMsgs[i][j].getPlainBody(); var perm = myThreads[i].getPermalink(); var value2 = myMsgs[i][j].getPlainBody(); valMsgs.push([date,from,subj,body,msid,perm,value2]); } } } /*hangoutbotに通知*/ if(valMsgs.length>0){//新規メールがある場合、botに通知する //botのURLを入れる var url = "***(URL)"; var text = value2; var payload = { "text" : text } var json = JSON.stringify(payload); //エンコード var options = { "method" : "POST", "contentType" : 'application/json; charset=utf-8', "payload" : json } var response = UrlFetchApp.fetch(url, options); } /* スプレッドシートに出力 */ if(valMsgs.length>0){//新規メールがある場合、末尾に追加する var lastRow = mySheet.getDataRange().getLastRow(); mySheet.getRange(lastRow+1, 1, valMsgs.length, 7).setValues(valMsgs); } } function hasId(id){ var data = mySheet.getRange(1, 5, mySheet.getLastRow(),1).getValues();//E列(メッセージID)を検索範囲とする var hasId = data.some(function(value,index,data){//コールバック関数 return (value[0] === id); }); return hasId; }
#スクリプトを実行すると
上記スクリプトを実行して得られる情報は下記の感じです。
この情報がD列とG列に記載されます。
この予定は変更されました。
タイトル: ******
(詳細に記載の情報が複数行ある)
日時: ******
場所: ******,
カレンダー: *****
参加者:
* *****- 作成者予定の詳細:
https://www.google.com/calendar/event?action=VIEW&eid=*****(カレンダーへのリンク)Google カレンダーからの招待状: https://www.google.com/calendar/
「***(カレンダー名)」カレンダーの招待 - 更新の受信が設定されているため、本メール
を sample@email.com にお送りしています。これらのメールを受けとらないようにするには、
https://www.google.com/calendar/ にログインしてカレンダーの通知設定を変更し
てください。この招待状を転送すると、転送先のユーザーも、主催者に出欠の返答を送信してゲス
トリストに追加してもらったり、自分の招待ステータスに関係なく他のユーザーを招
待したり、あなたの出欠確認の返答を変更したりできるようになります。詳しくは、
https://support.google.com/calendar/answer/37135#forwarding をご覧ください
#試したこと:matchメソッド
変更したい getPlainBody()の後にmatchメソッドを置いて残したい最後の「作成者」を指定しましたが、改行があるため除外されたのか…?全文を残すことができませんでした。
↓変更したコード
/* 各メールから日時、送信元、件名、内容を取り出す */ for(var i=0;i<myMsgs.length;i++){ for(var j=0;j<myMsgs[i].length;j++){ var msid = myMsgs[i][j].getId();//メッセージIDを取得 //もしメッセージIDがスプレッドシートに存在しなければ if(!hasId(msid)){ var date = myMsgs[i][j].getDate(); var from = myMsgs[i][j].getFrom(); var subj = myMsgs[i][j].getSubject(); var body = myMsgs[i][j].getPlainBody().match(/.*作成者/); var perm = myThreads[i].getPermalink(); var value2 = myMsgs[i][j].getPlainBody(); valMsgs.push([date,from,subj,body,msid,perm,value2]); } } }
↓得られた結果
D列が下記の作成者のみになりました。(改行があるためそこで切られてしまうのでしょうか)
* *****- 作成者
どうぞよろしくお願いいたします。