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

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

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

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

JavaScript

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

Q&A

解決済

1回答

1206閲覧

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

YousukeTanaka

総合スコア79

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿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

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

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

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

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

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

sawa

2020/10/28 02:45

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

2020/10/28 10:45

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

2020/10/28 10:49

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

2020/10/28 11:10

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

回答1

0

自己解決

「condition += " after:" + yesterday; 」に問題がありました。「condition += " after:" + strYesterday」とすることで、ファイルの出力はできました。

投稿2020/10/28 10:46

YousukeTanaka

総合スコア79

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問