Gmailで受信した特定のメールをスプレッドシートに出力したい

1,331 views
Skip to first unread message

Ni

unread,
Aug 8, 2014, 8:25:41 PM8/8/14
to google-app...@googlegroups.com
お世話になります。
以下、ご存知の方いらっしゃいましたら、教えていただけますでしょうか?

Gmailで来たメールの内容をスプレッドシートに出力するスクリプトを作っています。

現在のスクリプトだと、受信したメールに返信して、そのメールに返信が来た場合、
受信したメール、返信したメール、返信が来たメールの全てがスプレッドシートに出力されてしまいます。
最初の受信したメールのみをスプレッドシートに出力したいです。

また、現在はbody部分をそのまま全て1つのセルに出力するようになっていますが、
body内の【ABC】以降、改行前までの内容を別セルに出力するようにしたいです。


function contact() {
 
// 検索クエリ
 
var query = "is:unread subject:(件名) -{label:star}";


 
// メールを取得する
 
var threads = GmailApp.search(query);
 
if (threads == null || threads.length === 0) return;
 
 
for (var i = 0, tlen = threads.length; i < tlen; i++) {
   
var msgs = threads[i].getMessages();
   
for (var j = 0, mlen = msgs.length; j < mlen; j++) {
     
var msg = msgs[j];
     
if (!msg.isUnread()) continue;
 
     
var from = msg.getFrom();
     
var subject = msg.getSubject();
     
     
// 添付ファイルがあるときに時々エラーになるため、その場合は自前でプレーンテキスト化する
     
var body;
     
try {
        body
= msg.getPlainBody();
     
}
     
catch(e) {
        body
= msg.getBody().replace(/<br[^>]*>/g, '\n').replace(/<[^>]+>/g, '').replace(/&(lt|gt|quot|amp|nbsp|#x?[0-9]+);/g, function(w, $1) {
         
if ($1.indexOf('#x') === 0) {
           
return String.fromCharCode(parseInt($1.substr(2), 16));
         
}
         
if ($1.indexOf('#') === 0) {
           
return String.fromCharCode(parseInt($1.substr(1), 10));
         
}
         
return ({
            lt
: '<',
            gt
: '>',
            quot
: '"',
            amp
: '&',
            nbsp
: ' '
         
})[$1];
       
});
     
}
     
     
// 出力先のスプレッドシートを指定する
     
var spreadsheet_url = "URL";
     
var OBU = SpreadsheetApp.openByUrl(spreadsheet_url);
     
var OBU_Sheet = OBU.getSheetByName("シート名");
     
var sheet = OBU.setActiveSheet(OBU_Sheet);
      sheet
.appendRow([from, subject, body]);

      msg
.star();
      msg
.markRead();
   
}
 
}
}

Pomu Takeuchi

unread,
Aug 8, 2014, 9:21:52 PM8/8/14
to google-app...@googlegroups.com
In-Reply-Toヘッダの有無で最初のメールか返信かを区別するとかはどうでしょうか?

2014/08/09 9:25、Ni <nkp...@gmail.com> のメッセージ:

--
このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Ni

unread,
Aug 12, 2014, 11:12:47 PM8/12/14
to google-app...@googlegroups.com
返信ありがとうございます。

たしかにIn-Reply-Toの情報があれば、区別できそうです!
In-Reply-Toなどのヘッダ情報はどのようなメソッドでデータを取得できるのでしょうか?

2014年8月9日土曜日 10時21分52秒 UTC+9 pomu0325:
このグループから退会し、グループからのメールの配信を停止するには google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages