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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

【GAS】メールに添付されたファイルの自動保存

YousukeTanaka
YousukeTanaka

総合スコア0

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

1クリップ

526閲覧

投稿2020/10/27 13:11

やりたいこと

  1. WordPressの顧客からきたお問い合わせメールにある見積もり添付を自動的にGoogle Driveの特定フォルダに保存したい。
  2. その際、保存された日程と顧客の名前をフォルダ化して保存したい。

直面する問題

  1. まず、ファイルが保存できるかどうか試しているが、エラーは出ないが、ファイルの保存もされない。
  2. その際、一度は、保存されたが、ファイルを消去して、何度か実行を繰り返すうちにファイルが保存されなくなった。

知りたいこと

  • なぜ、最初は期待通りの動きをして、その後、できないのかの理由を知りたい。コードに誤りがあれば、指摘をしていただきたい。(エラーが出ないし、Logger.logで確認してもよくわからない。)
  • 次のステップとしてフォルダの作成を考えているが、方向性を確認したい。

ここに関しては、別の関数で、名前取得の関数を作成し、gmailのお問い合わせの内容にある「顧客名」を取得し、それを.createFolder(名前)で実行したが、うまくいかなかったため、考え方を知りたい。

問題となるコード

function saveAttachments(){ //日付計算 var now = new Date(); var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var yesterday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1); var strYesterday = Utilities.formatDate(yesterday, "JST", "yyyy/MM/dd"); let condition; condition = "subject:(@@@@@)"; //特定のタイトル condition += " has:attachment"; //添付あり condition += " after:" + yesterday; //今日(昨日より後) var search_mail = GmailApp.search(condition, 0, 20); var messeges = GmailApp.getMessagesForThreads(search_mail); var targetFolder = DriveApp.getFolderById('ファイルのID'); for(var i = 0; i < messeges.length; i++) { //検索結果を一つずつ取り出す for(var j = 0; j < messeges[i].length; j++) { //スレッドの場合ここを複数回実行 var attach = messeges[i][j].getAttachments(); var day = messeges[i][j].getDate(); //取り出したメールの日付を取得 var strDay = Utilities.formatDate(day , "JST", "yyyy_MM_dd"); if (day > today){ for(var k = 0; k < attach.length; k++){ var filename = strDay + '_' + attach[k].getName();       //ファイルがあれば、上書きし、なければ新たに作成する。 if(filename){ targetFolder.setContent(attach[k]); } else { targetFolder.createFile(attach[k]); var file = targetFolder.getFilesByName(attach[k].getName()); file.next().setName(filename); } } } } } }

上記コードの参考
https://note.com/bets_inc/n/n222ac80b9cc6

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

sawa
sawa

2020/10/28 02:45

検索条件に合致するメールは取得出来てますか? messeges\.length をログに書き出して確認してみてください。
YousukeTanaka
YousukeTanaka

2020/10/28 10:45

上記の問題については、ログで確認したところ、「condition \+= " after:" \+ yesterday; 」に問題がありました。「condition \+= " after:" \+ strYesterday」とすることで、ファイルの出力はできました。大変ありがとうございました。
sawa
sawa

2020/10/28 10:49

参考元のコードも間違ってましたよね。。質問は1回の投稿で一つに絞った方が良いので、こっちは一度自己解決にしてフォルダ作成の方は別質問として投稿した方が良いです。
YousukeTanaka
YousukeTanaka

2020/10/28 11:10

承知しました。貴重なお時間を取っていただきありがとうございました。感謝いたします。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。