やりたいこと
- WordPressの顧客からきたお問い合わせメールにある見積もり添付を自動的にGoogle Driveの特定フォルダに保存したい。
- その際、保存された日程と顧客の名前をフォルダ化して保存したい。
直面する問題
- まず、ファイルが保存できるかどうか試しているが、エラーは出ないが、ファイルの保存もされない。
- その際、一度は、保存されたが、ファイルを消去して、何度か実行を繰り返すうちにファイルが保存されなくなった。
知りたいこと
- なぜ、最初は期待通りの動きをして、その後、できないのかの理由を知りたい。コードに誤りがあれば、指摘をしていただきたい。(エラーが出ないし、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); } } } } } }
検索条件に合致するメールは取得出来てますか?
messeges.length をログに書き出して確認してみてください。
上記の問題については、ログで確認したところ、「condition += " after:" + yesterday; 」に問題がありました。「condition += " after:" + strYesterday」とすることで、ファイルの出力はできました。大変ありがとうございました。
参考元のコードも間違ってましたよね。。質問は1回の投稿で一つに絞った方が良いので、こっちは一度自己解決にしてフォルダ作成の方は別質問として投稿した方が良いです。
承知しました。貴重なお時間を取っていただきありがとうございました。感謝いたします。
回答1件
あなたの回答
tips
プレビュー