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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google API

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

Google Apps Script

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

Q&A

解決済

1回答

2596閲覧

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

MON5277

総合スコア22

Google API

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

Google Apps Script

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

0グッド

0クリップ

投稿2017/03/02 00:43

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

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

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

GoogleApps

1function START() { 2 3 deleteTriggers_(); 4 5 ScriptApp.newTrigger("evernote").timeBased().everyMinutes(10).create(); 6 7 ScriptApp.newTrigger("evernote").timeBased().after(1000*60).create(); 8 9 Browser.msgBox("The program is now running in the background. You can close the Google Sheet."); 10 11} 12 13function STOP() { 14 15 deleteTriggers_(); 16 17 Browser.msgBox("The program has stopped. For help, send an email at amit@labnol.org or tweet @labnol"); 18 19} 20 21function getGmailLabel_(name) { 22 23 var label = GmailApp.getUserLabelByName(name); 24 25 if (!label) { 26 label = GmailApp.createLabel(name); 27 } 28 29 return label; 30 31} 32 33function evernote() { 34 35 try { 36 37 if (emailQuota_() < 1) return; 38 39 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 40 41 var params = sheet.getRange("D3:D7").getValues(); 42 43 var label = getGmailLabel_(params[1][0].trim().replace(/\s+/g, "-")); 44 45 var threads = label.getThreads(); 46 47 for (var t in threads) { 48 49 var messages = threads[t].getMessages(); 50 51 if (emailQuota_() > 1) { 52 53 var message = messages[messages.length-1]; 54 55 var subject = [message.getSubject(), params[2][0], params[3][0]].join(" "); 56 57 try { 58 message.forward(params[0][0], {subject: subject}); 59 } catch (f) { 60 Logger.log(f.toString()); 61 } 62 63 if (params[2][0].match(/y/i)) { 64 threads[t].moveToTrash(); 65 } else { 66 threads[t].removeLabel(label); 67 } 68 } 69 70 } 71 72 73 } catch (e) { 74 Logger.log("ERROR: " + e.toString()); 75 } 76 77} 78 79 80function deleteTriggers_() { 81 82 var triggers = ScriptApp.getProjectTriggers(); 83 84 for(var i in triggers) { 85 ScriptApp.deleteTrigger(triggers[i]); 86 } 87 88} 89 90 91function emailQuota_() { 92 return MailApp.getRemainingDailyQuota(); 93}

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/03/02 00:48

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

2017/03/02 00:55

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

回答1

0

ベストアンサー

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

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

投稿2017/03/02 01:08

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MON5277

2017/03/02 01:15

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

2017/03/02 01:16

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

2017/03/02 01:18

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

2017/03/02 01:41

単純にfunction deleteTriggers_()をコメントアウトしたら、GoogleAppsScriptからエラーメッセージが来てしまいました↓ スクリプト ctrlq.org を正常に完了できませんでした。失敗のまとめを下記に示します。 関数:evernote エラーメッセージ:起動時間の最大値を超えました トリガー:time-based 私の解釈が間違っていますでしょうか?
Zuishin

2017/03/02 01:42

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

2017/03/02 02:49

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

2017/03/02 06:32

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

2017/03/02 06:58

「@ ラベル名」は Evernote の「ラベル名」という名前のノートブックに投稿するための件名です。 このスクリプトは、このメッセージを作って送信しています。 Gmail は送信したメールを残しますから、それが増えます。
MON5277

2017/03/02 07:09

度々すみません。ありがとうございます。 少しずつ眺めていたら部分的にわかってきました。 Noにしたらゴミ箱行き、 Yesにしてらラベルを外す ということで合っているでしょうか? Noに設定してあったのですが、結果ラベルが外されてゴミ箱行きになったと錯覚していたようです。 どうでしょうか?
Zuishin

2017/03/02 07:43

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

2017/03/02 08:41

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

2017/03/02 09:36

ラベルを外さない削除もしないとなると、同じメールを延々と送り続けることになります。 既に送ったメールと未転送のメールを区別するためにラベルを外しています。 外していけないラベルなのであれば、ラベルをもう一つ作ってそれを対象にしてみてはいかがでしょうか? 例えば今まで FAX から送られてきたメールに FAX というラベルをつけていたなら、FAX というラベルをつけると同時に ForwardedFAX というラベルをつけ、それを転送してみてはいかがでしょう?
MON5277

2017/03/02 10:30

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問