質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Google Apps Script

    846questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google API

    529questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Script でGmail受信データをEvernoteに転送

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 801

MON5277

score 12

このサイトを参考にして、Gmailのあるラベルに振り分けされたメールをevernoteのあるノートブックに転送するスクリプトを実行したところ、Gmail側のメールがEvernoteに転送された時点ですべて削除となってしまいました。

本当は新着のメールがラベルに振り分けられたタイミングでEvernoteへの転送のみ行い、Gmail側で削除はさせたくないのですが、可能でしょうか?
なんとなくfunction deleteTriggers_()で削除されているように思うのですが、ここを削除すると永遠に同じものがevernoteに転送されそうで試せていません。

ご教授いただけませんでしょうか?
宜しくお願い致します。

function START() {

  deleteTriggers_();

  ScriptApp.newTrigger("evernote").timeBased().everyMinutes(10).create();

  ScriptApp.newTrigger("evernote").timeBased().after(1000*60).create();

  Browser.msgBox("The program is now running in the background. You can close the Google Sheet.");

}

function STOP() {

  deleteTriggers_();

  Browser.msgBox("The program has stopped. For help, send an email at amit@labnol.org or tweet @labnol");

}

function getGmailLabel_(name) {

  var label = GmailApp.getUserLabelByName(name);

  if (!label) {
    label = GmailApp.createLabel(name);
  }

  return label;

}

function evernote() {

  try {

    if (emailQuota_() < 1) return;

    var sheet = SpreadsheetApp.getActiveSpreadsheet();

    var params = sheet.getRange("D3:D7").getValues();

    var label = getGmailLabel_(params[1][0].trim().replace(/\s+/g, "-"));

    var threads = label.getThreads();

    for (var t in threads) {

      var messages = threads[t].getMessages();

      if (emailQuota_() > 1) {

        var message = messages[messages.length-1];

        var subject = [message.getSubject(), params[2][0], params[3][0]].join(" ");

        try {
          message.forward(params[0][0], {subject: subject});
        } catch (f) {
          Logger.log(f.toString());
        }

        if (params[2][0].match(/y/i)) {
          threads[t].moveToTrash();
        } else {
          threads[t].removeLabel(label);
        }
      }

    }


  } catch (e) {
    Logger.log("ERROR: " + e.toString());
  }

}


function deleteTriggers_() {

  var triggers = ScriptApp.getProjectTriggers();

  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

}


function emailQuota_() {
  return MailApp.getRemainingDailyQuota();  
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2017/03/02 09:48

    単純に Gmail の転送機能を使って Gmail へ来た特定のメールを Evernote へ転送したのではだめなのですか?

    キャンセル

  • MON5277

    2017/03/02 09:55

    ご質問有難うございます。今までそうしていたのですが、evernoteの特定のノートブックに振り分けが出来なくて、今回の手段を選んでいます。evernoteメールアドレスへの転送の際に、件名を編集して送信(@ノートブック名 を追加)することが出来ないと思っているのですが間違っていますでしょうか?

    キャンセル

回答 1

checkベストアンサー

+1

タイトルを変更するなら単純な転送では無理ですね。
スクリプトを読んでみましたが、START() で処理が開始され、その間に受信したメールは転送されます。STOP() で処理が終了し、メールは転送されなくなります。
deleteTriggers_() は STOP を呼ばれたときに動くので、トリガは廃棄されてかまいません。START を呼べばまた作成されます。

使い方は、必要事項を記入して START() を呼び、そのまま放置です。
ほかにトリガを作る必要はありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/02 10:15

    ありがとうございます。一度やってみます。具体的にはFAXの転送に使っているので、FAXが来ないと確認できません。FAX側がもう少し柔軟に設定出来ればこんなことはしなくて良いのだと思うのですが。
    またご報告させていただきます。

    キャンセル

  • 2017/03/02 10:16

    携帯からその形式でメールを送ってみられては?

    キャンセル

  • 2017/03/02 10:18

    なるほど(^^)携帯でなくても他のアドレスも使っているのでそれで試してみます!

    キャンセル

  • 2017/03/02 10:41

    単純にfunction deleteTriggers_()をコメントアウトしたら、GoogleAppsScriptからエラーメッセージが来てしまいました↓

    スクリプト ctrlq.org を正常に完了できませんでした。失敗のまとめを下記に示します。
    関数:evernote
    エラーメッセージ:起動時間の最大値を超えました
    トリガー:time-based

    私の解釈が間違っていますでしょうか?

    キャンセル

  • 2017/03/02 10:42

    間違ってます。
    削除しないで下さい。
    何をしているかは説明した通りです。

    キャンセル

  • 2017/03/02 11:49

    すみません、勘違いしているようでした。

    以下のコマンドで、gmailをゴミ箱へ移動したりラベルを外したりしているのでしょうか?
    if (params[2][0].match(/y/i)) {
    threads[t].moveToTrash();
    } else {
    threads[t].removeLabel(label);
    この行をコメントアウトしたら、件名@[ラベル名]@[ラベル名]・・・@[ラベル名] がGmail内に増えていきました。
    新しくラベルにメッセージが振り分けられたタイミングで、転送のみ行ってほしいのですが、、、
    削除はせずに残したいのです。わかりにくくてすみません。

    キャンセル

  • 2017/03/02 15:32

    書き換えずそのまま使ってください。設定で「Trash Forward Messages」がデフォルトで「Yes」になっていますが、これを No にするだけです。

    キャンセル

  • 2017/03/02 15:58

    「@ ラベル名」は Evernote の「ラベル名」という名前のノートブックに投稿するための件名です。

    このスクリプトは、このメッセージを作って送信しています。
    Gmail は送信したメールを残しますから、それが増えます。

    キャンセル

  • 2017/03/02 16:09

    度々すみません。ありがとうございます。
    少しずつ眺めていたら部分的にわかってきました。

    Noにしたらゴミ箱行き、
    Yesにしてらラベルを外す
    ということで合っているでしょうか?

    Noに設定してあったのですが、結果ラベルが外されてゴミ箱行きになったと錯覚していたようです。
    どうでしょうか?

    キャンセル

  • 2017/03/02 16:43

    逆です。英語ですが、読みにくければ「転送したメールをゴミ箱へ」と訳して書き直してください。Yes でゴミ箱へ入ります。ソースはいじらず、設定の方を書き直して下さい。

    キャンセル

  • 2017/03/02 17:41

    すみません、間違えて記入しましたが頭ではおっしゃる通りに思っていました。
    NoにするとGmailのラベルを外す という解釈は合っていますか?
    本当はゴミ箱へも移動せず、ラベルも外さず、新着分について転送だけしてくれるのが嬉しいのですが、、、

    キャンセル

  • 2017/03/02 18:36

    ラベルを外さない削除もしないとなると、同じメールを延々と送り続けることになります。
    既に送ったメールと未転送のメールを区別するためにラベルを外しています。

    外していけないラベルなのであれば、ラベルをもう一つ作ってそれを対象にしてみてはいかがでしょうか?

    例えば今まで FAX から送られてきたメールに FAX というラベルをつけていたなら、FAX というラベルをつけると同時に ForwardedFAX というラベルをつけ、それを転送してみてはいかがでしょう?

    キャンセル

  • 2017/03/02 19:30

    やはりそうなのですね。
    おっしゃる通り、FwdFAXを作って、ゴミ箱削除の設定にすることにします。
    こちらでも ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    846questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google API

    529questions

    Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。