2015-10-01 30 views
6

これは最初から書き込もうとする最初のスクリプトです。今はうまくいっていないので、私はいくつかの助けを求めるつもりです。Google Appsスクリプト - gmailからスプレッドシートにデータを抽出する

ケース:私は、電子商取引サイトからの電子商取引確認メールを返信メールアドレスなしで受信します。電子メールの本文では、バイヤーから電子メールアドレスを送信します。私は身体の電子メールアドレスに自動メールを送信したいと思います。

どのように私はこれを行うつもりですか(手順を削除するためにsuggetionsがありがとう)。

  1. 受信メールに固有のタグを付けるルールを使用します。

  2. このタグを使用して、スクリプトでGmailのメールを特定し、1つずつ移動して必要な情報を抽出します。電子メール本文を含む正規表現を使用して、自動化された電子メールを送信するために必要な電子メールアドレスを抽出します。計画は次のものを得ることです:本文からの件名、日付、Eメール。

  3. すべての情報をスプレッドシートに書き込みます。

  4. 重複した実行を防ぐために、一意のタグ情報を削除してください。

  5. フォームmuleアドオンを使用して、スプレッドシートから電子メールを送信します。

はこれまでのところ、私はステップ1(簡単な)を扱ってきました、そして、ステップ2と3(イムないコーダでstugglingされて、私は、undestrandを読み、ハックすることができます。ゼロからの書き込みが完全に異なっています物)。私はこれを扱う最善の方法だと思う前に、私は4を扱った。

スクリプトを使用して、スプレッドシートに情報を抽出します。アドオンを使用して、スプレッドシートの情報を使用して電子メールを送信します。

これはこれまでに書かれたコードです。私は後で私はまだスプレッドシートに何かを書くことはできません原因のための正規表現の部分を残しました。一度私はそれが正常に働く、病気の作業を開始正規表現とスクリプトの "ラベルを削除"の側面。

function myFunction() { 
    function getemails() { 
    var label = GmailApp.getUserLabelByName("Main tag/subtag"); 
    var threads = label.getThreads(); 
    for (var i = 0; i < threads.length; i++) { 
    var messages=threads[i].getMessages(); 
     for (var j = 0; j < messages.length; j++) { 
    var message=messages[j]; 
    var subject=message.getSubject(); 
    tosp(message); 
     } 
    } 
    } 

    function tosp(message){ 
    var body=message.getBody() 
    var date=message.getDate(); 
    var subject=message.getSubject(); 
    var id= "my spreasheet id"; 
    var ss = SpreadsheetApp.openById(id); 
    var sheet = ss.getActiveSheet(); 
    sheet.appendRow(subject,date,body);  

} 
} 

助けてください。コードされた後

おかげで セバスチャン

答えて

15

私が書いたと完全によく、あなたが言及した手順2、3と4を実行し、試験しました。コード内の障害の

function myFunction() { 

    var ss = SpreadsheetApp.getActiveSheet(); 

    var label = GmailApp.getUserLabelByName("MyLabel"); 
    var threads = label.getThreads(); 

    for (var i=0; i<threads.length; i++) 
    { 
    var messages = threads[i].getMessages(); 

    for (var j=0; j<messages.length; j++) 
    { 
     var msg = messages[j].getBody(); 
     var sub = messages[j].getSubject(); 
     var dat = messages[j].getDate(); 

     ss.appendRow([msg, sub, dat]) 
    } 
     threads[i].removeLabel(label); 
    } 
} 

一つappendRow関数は[ ]括弧内に指定された要素の配列を受け入れることでした。

このスクリプトを添付している場所に応じて、コードのあなたの行:スクリプトは、これらの電子メールをログに記録するスプレッドシートのスクリプトエディタで書かれている場合

var ss = SpreadsheetApp.openById(id); 

は必要ありません。複数のシートは、そのスプレッドシートである場合は、あなたは

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("Sheet1"); 

もう一つの提案により

var ss = SpreadsheetApp.getActiveSheet(); 

私のラインを置き換えることができ、現在のコードは、HTML形式であなたのメッセージを与えることです。あなたは、あなたがそれを見るようにプレーンテキストでメッセージを取得したい場合はそのため、使用:

var msg = messages[i].getPlainBody(); 

今、あなたは、正規表現のために別の関数を記述し、それにメッセージmsgを渡すことができます。お役に立てれば!

+0

このような素敵で詳細な説明です!私はちょうど 'ポイントNclick'に親指を与えることなく渡すことができませんでした! – Zongjun

+0

@pointNclick、申し訳ありませんが古いスレッド。しかし、返信を助けるcouldnt ....私は5000以上のメッセージ(スレッド)をgmailのラベルに持っています。上記のコードでは、Googleスプレッドシートに524件のメッセージしか記載されていません。デバッグモードのThread.lengthには500しか表示されません。理由は何でしょうか? – sifar786

関連する問題