2016-03-26 25 views
1

メール電車の中で唯一、最新のメッセージを表示するには、前のメッセージを含む単一の電子メールの =全体の内容Google Appsのスクリプト/正規表現は、電子メール、「電車」

メールスレッド Google Appsのスクリプトを=メッセージの配列

質問:Google Apps Scriptでは、メールトレイン内の最新のメールのみをインポートするにはどうすればよいですか?

GmailAppクラスに基づいた簡単なGoogle Appsスクリプトがあります。結局、これはスプレッドシートに(検索クエリを使用して)して、指定されたアドレスからのすべての電子メールをインポートします:

var threads = GmailApp.search('from: [email protected] OR to: [email protected]'); 
    Logger.log("Thread count: " + threads.length); 
    for (var i = 0; i < threads.length; i++) { 
    Logger.log("Subject:" + threads[i].getFirstMessageSubject()); 
    Logger.log("ID:" + threads[i].getId()); 
    var messages = threads[i].getMessages(); 
    for (var j = 0; j < messages.length; j++) { 
     Logger.log(messages[j].getPlainBody()); 
    } 
    } 

一般的には、電子メールでの問題は、誰かが電子メールに返信するとき、それは元のテキストが含まれていることです。 5つまたは6つの返信の後、個々のメッセージは非常に長くなり、上記のようにGmailのスレッド内のすべてのメッセージをインポートすると、重複のトンがあります。

gmail.comウェブインターフェースは、省略記号ボタンを使用してこの問題を回避して:私はこの黒魔術を複製するにはどうすればよい

Gmail ellipsis button

私は任意の解決策が完全ではないことを理解します。

私の最初の考えは、ある種の正規表現を使用することですが、どこから始めるべきかはわかりません。

答えて

2

実際、正規表現はこの問題を完全には解決できません。

var prev = /On (?:Sun|Mon|Tue|Wed|Thu|Fri|Sat), (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}, \d{4} at \d{1,2}:\d{2} [AP]M,/; 

そしてループで、一つはそのような日時から始まる各メッセージを切り捨てることができる:時間と日付の米国標準のため、以下に引用メッセージが前にGmailの日時文字列と一致します。

for (var j = 0; j < messages.length; j++) { 
    var text = messages[j].getPlainBody(); 
    var match = text.match(prev); 
    if (match) { 
    text = text.slice(0, match.index); 
    } 
    Logger.log(text); 
} 

一部の参加者がGmail用に異なるロケール設定を使用すると、これは失敗します。もちろん、曜日と[AP]Mをオプションにするなど、これを調整することもできます。

+0

ありがとう、これは素晴らしいスタートです。私は受信箱を通して作業し、送信者の電子メールクライアントによって展示されているさまざまな文字列形式をすべて列挙し、できるだけ多くの異なる文字列をキャプチャ&ストリップアウトするための大きな、醜い正規表現を組み込むことを望みます。 – hazymat

関連する問題